C++ 求階乘 四種方法
阿新 • • 發佈:2019-01-21
來總結下求階乘的各種方法哈。
寫在最前:①各個程式碼只是提供了求階乘的思路,以便在實際需要時再來編碼,程式碼並不健壯!②各個程式都在1到10內測試正確。
程式碼一:
#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()來暴力計算以得到結果。
程式碼二:
#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]; }
分析:該程式利用了陣列記錄已得到的結果,並在計算下一個結果時利用了已得到的結果。
程式碼三:
#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; }
分析:應該說該程式碼實用性最差,主要是來學習靜態區域性變數來了。
程式碼四:
#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;
}
分析:一直認為遞迴技術很神奇。雖然在時間和空間方面都不是很理想,但的確允許我們利用了以“模糊”的方式程式設計。對每個細節不必錙銖必較了。
寫在最後:程式是個很神奇的東西。程式設計是個很重要的能力。
歡迎拍磚!