【发布时间】:2019-03-06 23:55:03
【问题描述】:
此代码是使用递归打印斐波那契数列。所以我想设计一个递归而不是使用迭代,但是只要我执行代码并且一旦执行值提供程序函数,它就会显示一些错误“分段错误”。我只想这样做......有人可以帮忙吗?我只是一个初学者,所以请帮助和鼓励我......
#include<stdio.h>
int fibonacci(int n)
{
int res;
if(n==0)
return 0;
if(n==1)
return 1;
else
res = fibonacci(n-1)+fibonacci(n-2);
return res;
}
int value_provider(int n)
{
int choice1;
if(n>=0)
{
choice1 = fibonacci(n-1);
n -- ;
}
printf("%d",choice1);
if(n>=0)
{
value_provider(n);
}
}
void main()
{
int n;
printf("enter the number");
scanf("%d",&n);
value_provider(n);
}
此代码显示分段错误... 我能做些什么来删除它而不是更改代码? 我只想这样做;请帮忙!
【问题讨论】:
-
确保您没有尝试计算
-1的斐波那契,对吧? -
为什么
value_provider在没有return声明的情况下声明返回int? -
我不认为
value_provider需要递归。您当前的fibonacci实现已经是递归的,并且可以正确计算n的斐波那契数。 -
你的意见是什么?
-
建议
choice1 = fibonacci(n-1);-->choice1 = fibonacci(n);供初学者使用
标签: c recursion call stack-overflow tail-recursion