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

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

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


代码一:

[cpp] view plaincopyprint?
#include<iostream> 
using namespace std; 
 
int fac(int); 
 
int main() 

    int n; 
 
    while(cin>>n) 
    { 
        cout<<n<<"!= "<<fac(n)<<endl; 
    } 
 
    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<iostream> 
using namespace std; 
 
int a[11]; 
 
void init(); 
 
int main() 

    init(); 
 
    int n; 
 
    while(cin>>n) 
    { 
        cout<<n<<"!= "<<a[n]<<endl; 
    } 
 
    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<iostream> 
using namespace std; 
 
int fac(int); 
 
int main() 

    int i; 
 
    for(i=1;i<=10;i++) 
    { 
        cout<<i<<"!= "<<fac(i)<<endl; 
    } 
 
    return 0; 

 
int fac(int x) 

    static int f=1;   //静态局部变量 
 
    f*=x; 
 
    return f; 

             分析:应该说该代码实用性最差,主要是来学习静态局部变量来了。


代码四:

[cpp] view plaincopyprint?
#include<iostream> 
using namespace std; 
 
int fac(int); 
 
int main() 

    int n; 
 
    while(cin>>n) 
    { 
        cout<<n<<"!= "<<fac(n)<<endl; 
    } 
 
    return 0; 

 
int fac(int x)   //递归函数 

    int f; 
 
    if(x==0 || x==1) 
        f=1; 
    else 
        f=fac(x-1)*x; 
 
    return f; 



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


本文来自:加速度学习网 www.suduxx.com 欢迎记住域名下次再来。

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