2 回答

TA貢獻1820條經驗 獲得超10個贊
簡單的說:用循環語句代碼要多寫兩行,
用遞歸的話代碼很少但很運行時很費時間。
用循環語句寫:
int sum=0;
for(int i=1;i<n;i++)
{sum *=i;}
用遞歸的話就是:
int f(int n )
{if (n==0) return 1;
else return n*f(n-1);
}

TA貢獻1815條經驗 獲得超10個贊
dayuch2003的代碼問題:
1.在n比較小時可以,但是當n=800時,就會棧溢出,導致程序出錯。
2.對于輸入的0,返回錯誤的結果。
下面的代碼對這個進行了改進。
#include <iostream>
using namespace std;
int fun(int a,double sum);
int main()
{
int x;
cout<<"請輸入一個整數:";
cin>>x;
cout<<"n!=";
if(x==0) //如果輸入為0,直接返回結果
cout<<0<<endl;
else
cout<<fun(x,1)<<endl;
system("pause");
return 0;
}
int fun(int a,double sum)
{
if(a<1)
return sum;
else
return fun(a-1,sum*a);
}
----------------------------------------------------
遞歸調用會在棧上分配空間,每遞歸一次就分配一定空間,如果遞歸深度足夠大,肯定會造成棧溢出。而循環就不會涉及到棧的操做,從效率和空間上考慮推薦使用循環。
- 2 回答
- 0 關注
- 937 瀏覽
添加回答
舉報