出典:WeChat公式アカウント「プログラミング学習ベース」
まず第一にこれは面接の質問、タイトルはこんな感じ
有一个数列是1,1,2,3,5,8…请编程写出第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