亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++ 求 n!

C++ 求 n!

C++
12345678_0001 2018-07-29 21:21:22
C++算n!用歸遞的算法好呢還是用循環的算法有什么區別啊最好有代碼...
查看完整描述

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);
}

查看完整回答
反對 回復 2018-08-02
?
動漫人物

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);
}

----------------------------------------------------
遞歸調用會在棧上分配空間,每遞歸一次就分配一定空間,如果遞歸深度足夠大,肯定會造成棧溢出。而循環就不會涉及到棧的操做,從效率和空間上考慮推薦使用循環。

查看完整回答
反對 回復 2018-08-02
  • 2 回答
  • 0 關注
  • 937 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號