herrDeng網內搜尋

自訂搜尋

Ads

2008年10月2日 星期四

Fibonacci Sequence(2)

請列出費氏數列的值 a[n], 當 n=1,2,......,50, 到n為多少開始,C程式RUN出之a[n] 不對。

請不要用遞迴函數寫!你知道原因嗎?

提示:用for-loop

公式解:
a[n]=1/sqrt(5)*((1+sqrt(5))/2)^(n+1)-1/sqrt(5)*(1-sqrt(5))/2)^(n+1)

59 則留言:

匿名 提到...

using namespace std;
int main(){
int i, n=50;
long x, t, t1;
for( i = 0; i <= n; i++ ) {
if( i == 0 ){
t = 0;
t1 = 1;
}
else if( i == 1 ){
x=1;
t = t1;
t1 = x;
cout <<"no"i<<" "<< x << endl;
}
else {
x = t + t1;
t = t1;
t1 = x;

cout <<"no"i<<" "<< x << endl;
}
}
system("pause");
return 0;
}
ans:
到第46個開始不對.
相同的值.用遞迴函數要計算的次數比for loop多上許多,很多相同的數都計算好幾次.相對之下,for loop能比較有效率的完成計算.且數字越大,相差越多.

匿名 提到...

以費氏數列這個程式來看,遞迴需花費相當大的 Stack 空間,來儲存每個節點(function call ), 因為每個節點無法共用空間,若 N 的值相當大,那麼程式執行時就得花費相當大的空間與時間 。 而 For loop 程式執行時所花的時間與空間都相對於遞迴都少了許多。
static int fib(int n)
{
int i ;
if (n<=1)
return(n);
else
{
for(i=2;i<=n;i++)

f[i] = f[i-1] + f[i-2] ;
}
return (f[n]);
}
}

匿名 提到...

int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];

if(a[n]<=0){
cout "error" endl;
break;
}
else
cout n a[n] endl;
n++;

int的範圍是-2147483648~2147483647
所以到第46項就有錯誤發生溢位,所以就有錯誤產生。

遞迴函數可以很快解決問題 但是並不有效率 因為 a(n) 中呼叫了 a(n-1) 和 a(n-2) a(n-1) 又會呼叫 a(n-2) 及 a(n-3) 結果發現a(n-2)被重複呼叫 只要 n 越來越大 重複呼叫的次數就會越來越大

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;

輸出結果:
NO:0 1
NO:1 1
NO:2 2
NO:3 3
NO:4 5
NO:5 8
NO:6 13
NO:7 21
NO:8 34
NO:9 55
NO:10 89
NO:11 144
NO:12 233
NO:13 377
NO:14 610
NO:15 987
NO:16 1597
NO:17 2584
NO:18 4181
NO:19 6765
NO:20 10946
NO:21 17711
NO:22 28657
NO:23 46368
NO:24 75025
NO:25 121393
NO:26 196418
NO:27 317811
NO:28 514229
NO:29 832040
NO:30 1346269
NO:31 2178309
NO:32 3524578
NO:33 5702887
NO:34 9227465
NO:35 14930352
NO:36 24157817
NO:37 39088169
NO:38 63245986
NO:39 102334155
NO:40 165580141
NO:41 267914296
NO:42 433494437
NO:43 701408733
NO:44 1134903170
NO:45 1836311903
error
請按任意鍵繼續 . . .

匿名 提到...

int a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";

}
}
因為從46開始,之後的數字溢位,所以會變成負數,支後的數字都是錯的!

匿名 提到...

使用遞迴所用的時間是(指數時間)會比較慢

int a[51]={1,1};
for (int i=2;i<51;i++)
{
a[i]=2*a[i-1]+a[i-2];
printf("%2d:%11d\n",i,a[i]);
}
system("pause");
return 0;
AND:26錯誤

匿名 提到...

int a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
到第46個開始產生不對。

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;

到第46個開始 是錯誤的

匿名 提到...

B9633170


int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}

匿名 提到...

B9633170

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}


第46個開始不對.是負值!!

匿名 提到...

原因:使用遞迴所用的時間是指數時間,所以不能用遞迴
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("pause");
}

ans:
到第46個開始不對.

匿名 提到...

原因:使用遞迴所用的時間是指數時間,所以不能用遞迴
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" "a[n] endl;
n++;
}
system("pause");
}

ans:
到第46個開始不對.

匿名 提到...

int a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";

}
}
執行到46個出現錯誤

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;
第46個開始錯誤

匿名 提到...

原因:使用遞迴所用的時間是指數時間,所以不能用遞迴
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("pause");
}

ans:
到第46個開始不對.

匿名 提到...

原因:使用遞迴所用的時間是指數時間,所以不能用遞迴
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" "a[n]endl;
n++;
}
system("pause");
}

ans:
到第46個開始不對.

匿名 提到...

int a[51],i,x=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
cout<< x <<" "<< a[x] <<"\n";
x++;
if(a[x]<=0)
{
cout<< x <<" "<<"error"<<"\n";
break;

四十六是錯誤的開始

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}

匿名 提到...

int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
第46個開始產生不對。

匿名 提到...

用遞迴會變成指數時間,雖然遞迴可以使答案簡單化但是會有重複性,所以使用非遞迴會必較好。
using namespace std;
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout <<"error"<< endl;
break;
}
else
cout"NO:"n""a[n]endl;
n++;
}
system("pause");
}
而RUN到第46個時會呈現負數

匿名 提到...

    int a[51];
    int i;
    a[0]=1;
    a[1]=1;
    for(i=2;i<=50;i++)
    {
    a[i]=a[i-1]+a[i-2];
    cout<<"a["<<i<<"]="<<a[i]<<endl;
    if (a[i]<0)
    {
    cout<<"a["<<i<<"]=start error"<<endl;
    break ;
    }
    }
從第46項開始溢位
用for loop效率較高

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}


46個是負值!!

匿名 提到...

#include <iostream>
using namespace std;
int main()
{
int a[50];
int n;
a[0]=1;
a[1]=1;
for(n=2;n<=50;n++)
{
a[n]=a[n-1]+a[n-2];
cout<<"a["<<n<<"]="<<a[n]<<endl;
if (a[n]<0)
{
cout<<"a["<<n<<"]=error"<<endl;
break ;
}
}
system("pause");
return 0;
}

到第46個開始產生溢位

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;
第46個開始錯誤

匿名 提到...

int main(){
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;}
else
cout "NO:" n" " a[n] endl;
n++;}
system("Pause");}
ans:第46開始錯誤

匿名 提到...

遞迴用的時間是指數時間,所以不能用遞迴
int f[50]={1,1};
for(int n=2;n<51;n++)
{
f[n]=2*f[n-1]+f[n-2];
printf("%2d : %11d\n",n,f[n]);
}
system("pause");
return 0;
}
答:第26個開是錯

匿名 提到...

 int main()
{
int x[51];
int n;
x[0]=1;
x[1]=1;
for(n=2;n<=50;n++)
{
x[n]=x[n-1]+x[n-2];
cout<<"x["<<n<<"]="<<x[n]<<endl;
if (x[n]<0)
{
cout<<"x["<<n<<"]=error"<<endl;
break ;
}
}
system("pause");
return 0;
}

第46個開始不對.產生負值

匿名 提到...

int a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}
第46個開始不對.是負值

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}


第46個開始不對.是負值

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;


第46個開始不對

匿名 提到...

int a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
到第46個開始產生不對。

匿名 提到...

int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}

第46個開始產生不對。

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;
第46個開始錯誤

匿名 提到...

int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;

到第46個開始產生錯誤。

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;

到第46個開始 是錯誤的

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}

從46個開始為負

匿名 提到...

using namespace std;
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout <<"error"<< endl;
break;
}
else
cout"NO:"n""a[n]endl;
n++;
}
system("pause");
}
第46個開始不對產生負值

匿名 提到...

int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
Ans:第46個開始錯誤。

匿名 提到...

int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
第46個開始不對。

匿名 提到...

int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
到第46個開始產生不對。

匿名 提到...

using namespace std;
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout <<"error"<< endl;
break;
}
else
cout"NO:"n""a[n]endl;
n++;
}
system("pause");
}
從第46個數值開始不對產生負值
!!!!!

匿名 提到...

原因:使用遞迴所用的時間是指數時間,所以不能用遞迴
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("pause");
}

ans:
到第46個開始錯誤

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}


到第46個不對

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}


從46開始的值都是負的

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;
第46個開始是錯的

匿名 提到...

int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";
}
第46個開始不對。

匿名 提到...

int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];

if(a[n]<=0){
cout "error" endl;
break;
}
else
cout n a[n] endl;
n++;

int的範圍是-2147483648~2147483647
所以到第46項就有錯誤發生溢位,所以就有錯誤產生。

遞迴函數可以很快解決問題 但是並不有效率 因為 a(n) 中呼叫了 a(n-1) 和 a(n-2) a(n-1) 又會呼叫 a(n-2) 及 a(n-3) 結果發現a(n-2)被重複呼叫 只要 n 越來越大 重複呼叫的次數就會越來越大

匿名 提到...

int main()
{
int a[50];
double i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout<<"NO:" n" " a[n] endl;
n++;
}
system("pause");
}




從46個開始不對.


使用遞迴所用的時間是指數時間,所以不能用遞迴

匿名 提到...

int main(){
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n " a[n] endl;
n++;

到第46個開始 是錯誤的

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}
第46個開始是不對的 是負值

匿名 提到...

using namespace std;
int main(){
int i, n=50;
long x, t, t1;
for( i = 0; i <= n; i++ ) {
if( i == 0 ){
t = 0;
t1 = 1;
}
else if( i == 1 ){
x=1;
t = t1;
t1 = x;
cout <<"no"i<<" "<< x << endl;
}
else {
x = t + t1;
t = t1;
t1 = x;

cout <<"no"i<<" "<< x << endl;
}
}
system("pause");
return 0;
}
ans:
到第46個開始不對.
相同的值.用遞迴函數要計算的次數比for loop多上許多,很多相同的數都計算好幾次.相對之下,for loop能比較有效率的完成計算.且數字越大,相差越多.

匿名 提到...

int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++){
a[i]=a[i-1]+a[i-2];

if(a[n]<=0){
cout "error" endl;
break;
}
else
cout n a[n] endl;
n++;

int的範圍是-2147483648~2147483647
所以到第46項就有錯誤發生溢位,所以就有錯誤產生。

遞迴函數可以很快解決問題 但是並不有效率 因為 a(n) 中呼叫了 a(n-1) 和 a(n-2) a(n-1) 又會呼叫 a(n-2) 及 a(n-3) 結果發現a(n-2)被重複呼叫 只要 n 越來越大 重複呼叫的次數就會越來越大

匿名 提到...

int main()
{
int a[50];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("Pause");
}


第46個開始不對.是負值

匿名 提到...

using namespace std;
int main(){
int i, n=50;
long x, t, t1;
for( i = 0; i <= n; i++ ) {
if( i == 0 ){
t = 0;
t1 = 1;
}
else if( i == 1 ){
x=1;
t = t1;
t1 = x;
cout <<"no"i<<" "<< x << endl;
}
else {
x = t + t1;
t = t1;
t1 = x;

cout <<"no"i<<" "<< x << endl;
}
}
system("pause");
return 0;
}
ans:
到第46個開始不對.
相同的值.用遞迴函數要計算的次數比for loop多上許多,很多相同的數都計算好幾次.相對之下,for loop能比較有效率的完成計算.且數字越大,相差越多.

匿名 提到...

int a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";

}
}
執行到46個出現錯誤

匿名 提到...

原因:使用遞迴所用的時間是指數時間,所以不能用遞迴
int main()
{
int a[50];
long i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[n]<=0){
cout "error" endl;
break;
}
else
cout "NO:" n" " a[n] endl;
n++;
}
system("pause");
}

ans:
到第46個開始錯誤

B1053382 洪承楓 提到...

nt a[51];
int i,n=0;
a[0]=1;
a[1]=1;
for(i=2;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
cout<<"a["<< n <<"]"<<" "<< a[n] <<"\n";
n++;
if(a[n]<=0)
{
cout<<"a["<< n <<"]"<<" start error"<<"\n";

}
}
執行到46個出現錯誤

Related Posts Plugin for WordPress, Blogger...

熱門文章