請列出費氏數列的值 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)
herrDeng網內搜尋
自訂搜尋
Ads
訂閱:
張貼留言 (Atom)
熱門文章
-
教育部為提昇全民資安素養與電腦防護能力,本部於101年9月5日至11月5日舉辦「全民資安素養自我評量」活動,請在活動期間內踴躍上網檢測資訊安全素養認知程度,並有機會參與抽獎,詳情請參閱活動網站(網址: https://isafe.moe.edu.tw/event
-
先說明一下這是後知後覺的解答,所謂後知就是股票價格已知存在陣列(清單),當然就要用迴圈練習,雙迴圈暴力解需時O(n**2),當然不用,採python單一迴圈解答「最佳股票的買賣時機#LeetCode 121 Best Time to Buy and Sell Stock」,解...
-
url="https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=20220330&stockNo=2330"
-
你會用C的算子sizeof?
-
Python C++使用字串find迴圈速解Leetcode 2490 Circular Sentence C++ & Python都有字串的find,用法都類似 split=s.find(' ', split+1)能找到s從index=split+1開...
-
Python CPP heap priority queue速解L eetcode 2530. Maximal Score After Applying K Operations heap/priority queue是重要的資料結構,無論是C++的std::priority_q...
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個開始錯誤
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個出現錯誤
張貼留言