再帰または累積を使用するフィボナッチ数列を見つける

ここに画像の説明を挿入

出典:WeChat公式アカウント「プログラミング学習ベース」

まず第一にこれは面接の質問、タイトルはこんな感じ

有一个数列是112358…请编程写出第50个数字是多少

とても簡単?それはフィボナッチ数列ではありませんか?私を見てください

#include<stdio.h>
#include<time.h>

double fun(double n){
    
    
	if (n < 0)
		return 0;
	if (n == 1 || n == 2)
		return (double)1;
	return fun(n - 1) + fun(n - 2);
}

int main()
{
    
    
	clock_t start, stop;
	start = clock();	//开始计时
	printf("%.lf\n", fun(50));
	stop = clock();		//停止计时
	double duration = ((double)(stop - start)) / CLK_TCK;
	printf("计算所需时间:%lf\n", duration);
	printf("over");
	return 0;
}

再帰を使用するのは非常に簡単に見えますが、効率はお世辞ではありません

12586269025
计算所需时间:442.055000
over

これが計算結果です。使用時間442秒

再帰は海と同じくらい深いので、注意して使用してください
。単純に合計してフィボナッチを見つけましょう。

#include<stdio.h>
#define NUM 50
int main()
{
    
    
	double arr[100];
	double first = 1, second = 1;
	for (int i = 0; i < 50; ++i){
    
    
		arr[2*i] = first;
		arr[2*i + 1] = second;

		first = first + second;
		second = second + first;
	}

	printf("arr[%d]:%.lf\n", NUM - 1, arr[NUM - 1]);

	//for (int i = 0; i < 50; i++)
	//	printf("arr[%d]:%.lf\n", i, arr[i]);
	return 0;
}

計算結果はほぼ数秒で表示されます

	arr[49]:12586269025

おすすめ

転載: blog.csdn.net/qq_44519484/article/details/108798244