ゴールデンセクションシーケンスとしても知られるフィボナッチシーケンス(フィボナッチシーケンス)は、数学者レオナルドダフィボナッチによってウサギの複製を例として導入されたため、「ラビットシーケンス」とも呼ばれます。
1、1、2、3、5、8、13、21、34 、...… n番目の項は最初の2つの項目の合計に等しくなります。
ループの実現
関数の実装:
int fib1(int n) {
if (n == 1) {
//斐波那契数第一项为1,特殊情况先举例更简单
return 1;
}
if (n == 2) {
//斐波那契数第二项也是1
return 1;
}
// 这俩变量分别表示第 i - 1 项和第 i - 2 项
int last1 = 1;
int last2 = 1;
int cur = 0;
for (int i = 3; i <= n; i++) {
//i从第三项开始
cur = last1 + last2;
last2 = last1;
last1 = cur;//依次循环赋值实现一直求和
}
return cur;
}
主な機能の実装:
int main()
{
int n = 0;
printf("输入要求的斐波那契数:\n");
scanf("%d", &n);
printf("%d", fib1(n));
return 0;
}
再帰関数の実装
関数の実装:
int fib2(int n) {
if (n == 1) {
//斐波那契数第一项为1,特殊情况先举例更简单
return 1;
}
if (n == 2) {
//斐波那契数第二项也是1
return 1;
}
return fib2(n - 1) + fib2(n - 2);//前一项和加后一项和
}
主な機能の実装:
int main()
{
int n = 0;
printf("输入要求的斐波那契数:\n");
scanf("%d", &n);
printf("%d", fib2(n));
return 0;
}
注:数が多い場合、再帰的実装は非常に冗長であり、多くの繰り返し計算を実行するため、再帰的実装時間はループよりもはるかに長くなります。バイナリツリーの外観に似ています:
追加の番号ごとに非常に多くのダブルカウント。