[C言語]フィボナッチ数列(フィボナッチ数列)の再帰的実装と非再帰的実装

フィボナッチ数列リード

フィボナッチ数列は広く使用されており、ここには記載されていません。

ここに画像の説明を挿入

C言語コードの実装-再帰

同時に、多くの種類のコード実装メソッドがあります。ここでは、C言語での実装メソッドのみを示します。

中心となるアイデアは、「再帰」を使用することです。

//C语言:递归实现 Fibonacci数列
//输入n,求 Fibonacci[n]   (在数学中,常常写作Fibonacci(n) ) 
#include <stdio.h>
#define N 100
long Fibonacci(int n);
int main(){
    
    
	int n;
	long k;
	printf("请输入n:");
	scanf("%d",&n);
	k=Fibonacci(n);
	putchar('\n');
	printf("Fibonacci(%d)=%ld\n",n,k);
	
	
	return 0;
	
}
long Fibonacci(int n){
    
    
	if(n==1||n==2)
	{
    
    
		return 1;
	}	
	else{
    
    
		return Fibonacci(n-1)+Fibonacci(n-2);
	}		
}

いくつかのテスト:

ここに画像の説明を挿入

ここに画像の説明を挿入

次の例では、データが大きすぎると、エラーが発生するはずです。精度の問題、表現範囲の問題が原因です。
正の解決策:Fibonacci(50)= 12 586 269 025
そして、以下の時間のかかることに注意してください。これも非常に長いです。
ここに画像の説明を挿入

教科書を見るとlong int、表現の範囲は
-2 147 483 648 ~ 2 147 483 647(10桁)であることがわかります。そして、上記のフィボナッチ(50)の結果は11桁です、もちろんそれはうまくいかないでしょう!

また、次の結果は正しくありません。
これも表現範囲の問題が原因です。
正しい解決策:Fibonacci(49)= 7 778 742 049以下の結果を
ここに画像の説明を挿入
テストしてみましょう正确。↓↓↓
ローカルテストでは、46番目の項目であるFibonacci(46)は、longintがテストできる最大値である必要があります。
8.822秒かかりました。
ここに画像の説明を挿入

C言語コードの実装-非再帰的

//非递归实现Fibonacci数列
#include <stdio.h>
long Fibonacci(int n);
int main(){
    
    
	int n;
	long k;
	printf("请输入n:");
	
	scanf("%d",&n);
	k=Fibonacci(n);
	
	putchar('\n');
	printf("Fibonacci(%d)=%ld\n",n,k);
	
	return 0;
}
//非递归实现Fibonacci数列 
long Fibonacci(int n)
{
    
    
	int n1=1,n2=1;
	int t=0,i=0;
	if (n<3)
	{
    
    	//即如果n为1或者2的话,那么Fibonacci(1) = Fibonacci(2)=1 
		return 1;
	}
	else  //下面举个例子,便于理解: 
	{
    
    //例如n为6,我们知道Fibonacci数列为:1、1、2、3、5、8...
	//此时对于下面for循环,则i=0,i<4。开始时n1和n2都是1,即第一和第二项 
		for(i=0; i<n-2; i++)
		{
    
    	
			t = n1 + n2; //t就是数列第三项,为 1+1=2 
			n1 = n2; //注意:令n2赋值给n1,即n1和n2分别 后移一位,这时新的n1即第二项F(2)=1 
			n2 = t;	//这里同理,t作为新的n2,即F(3)=2 
			//依次类推,即可实现求每一项,然后得到 Fibonacci(6),即 Fibonacci(n) 
		}//注意:如果还不好理解,那么动笔写一下就会理解啦! 
		return t;
	}
}

コメントをはっきりと書いたと思います。わからない場合は、次の写真を見てください。よく理解されているはずです。
ここに画像の説明を挿入

次に、いくつかのテスト
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
があります。上記の結果が正しいことがわかります。

(さらに、フィボナッチ数列の最初の100項目については、资源直接ダウンロードできるtxt形式で ""にアップロードします。)

どちらを選ぶかは、初心者の方にはわかりやすい再帰的な方法をお勧めします。

おすすめ

転載: blog.csdn.net/qq_44731019/article/details/123613913
おすすめ