加速度学习网-免费提供各种学习方法! 加入收藏

c++阶乘 求阶乘 四种方法

核心导读:c++阶乘技术很神奇。虽然在时间和空间方面都不是很理想,但的确允许我们利用了以“模糊”的方式编程。对每个细节不必锱铢必较了。
来总结下求阶乘的各种方法哈。写在最前:①各个代码只是提供了求阶乘的思路,以便在实际需要时再来编码,代码并不健壮!②各个程序都在1到10内测试正确。


代码一:

[cpp] view plaincopyprint?
#include?
using namespace std;?
?
int fac(int);?
?
int main()?
{?
??? int n;?
?
??? while(cin>>n)?
??? {?
??????? cout<<><>
??? }?
?
??? return 0;?
}?
?
int fac(int x)?
{?
??? register int i,f=1;? //定义寄存器变量?
?
??? for(i=1;i<=x;i++)?
??????? f*=i;?
?
??? return f;?
}?
??????????? 分析:该程序在每次输入n时,都会调用fac()来暴力计算以得到结果。


代码二:

[cpp] view plaincopyprint?
#include?
using namespace std;?
?
int a[11];?
?
void init();?
?
int main()?
{?
??? init();?
?
??? int n;?
?
??? while(cin>>n)?
??? {?
??????? cout<<><>
??? }?
?
??? return 0;?
}?
?
void init()?
{?
??? int i;?
?
??? a[0]=1;?
??? for(i=1;i<=10;i++)?
??????? a[i]=i*a[i-1];?
}?
???????????? 分析:该程序利用了数组记录已得到的结果,并在计算下一个结果时利用了已得到的结果。


代码三:

[cpp] view plaincopyprint?
#include?
using namespace std;?
?
int fac(int);?
?
int main()?
{?
??? int i;?
?
??? for(i=1;i<=10;i++)?
??? {?
??????? cout<<><>
??? }?
?
??? return 0;?
}?
?
int fac(int x)?
{?
??? static int f=1;?? //静态局部变量?
?
??? f*=x;?
?
??? return f;?
}?
???????????? 分析:应该说该代码实用性最差,主要是来学习静态局部变量来了。


代码四:

[cpp] view plaincopyprint?
#include?
using namespace std;?
?
int fac(int);?
?
int main()?
{?
??? int n;?
?
??? while(cin>>n)?
??? {?
??????? cout<<><>
??? }?
?
??? return 0;?
}?
?
int fac(int x)?? //递归函数?
{?
??? int f;?
?
??? if(x==0 || x==1)?
??????? f=1;?
??? else?
??????? f=fac(x-1)*x;?
?
??? return f;?
}?


分析:一直认为递归技术很神奇。虽然在时间和空间方面都不是很理想,但的确允许我们利用了以“模糊”的方式编程。对每个细节不必锱铢必较了。
写在最后:程序是个很神奇的东西。编程是个很重要的能力。


本文来自:快速学习网 www.666up.com 欢迎记住域名下次再来。

上一篇:没有了
下一篇:c++阶乘函数:天文数的阶乘计算