gpt4 book ai didi

c - 递归和斐波那契数列

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:00 26 4
gpt4 key购买 nike

如何让这段代码打印给定项的斐波那契数列的所有值?现在它只打印最后一个词

#include <stdio.h>

int fibonacci(int n){

if (n==2)
return 1;
else
return fibonacci(n-1) + fibonacci(n-2);

}


int main()
{

int n;
int answer;
printf("Enter the number of terms you'd like in the sequence\n");
scanf("%d",&n);

answer = fibonacci(n);
printf("The answer is %d\n", answer);

}

最佳答案

您的基本情况不正确。当 n==2 时,您将调用 fibonacci(1)fibonacci(0)。后者将继续向下,直到您用完堆栈空间。

您应该检查小于等于基本情况的数字:

if (n<=2)

编辑:

如果您想打印所有值,由于双重递归,您无法按照当前构造函数的方式进行打印。

如果您跟踪之前计算的数字,就可以完成。然后你只在第一次计算一个数字时打印出一个数字(并执行递归),否则你从列表中查找它并继续。

int fibonacci(int n){
static int seq[50] = {0};

if (n > 50) {
printf("number too large\n");
return 0;
}
if (seq[n-1] == 0) {
if (n<=2) {
seq[n-1] = 1;
} else {
seq[n-1] = fibonacci(n-1) + fibonacci(n-2);
}
printf("%d ", seq[n-1]);
}
return seq[n-1];
}

输出:

Enter the number of terms you'd like in the sequence
10
1 1 2 3 5 8 13 21 34 55 The answer is 55

请注意,上述函数的限制为 50,因为结果对于该范围内的 32 位 int 来说太大了。

关于c - 递归和斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com