由于重复递归,超出了堆栈限制

时间:2018-10-01 20:29:47

标签: c recursion call stack-overflow tail-recursion

此代码用于使用递归打印Fibonacci系列。因此,我想设计一种递归而不是使用迭代,但是,只要我执行代码,并且一旦执行值提供程序功能,就会显示一些错误“细分错误”。我只想以这种方式做...有人可以帮忙吗?我只是一个初学者,所以请帮助并鼓励我...

#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 个答案:

答案 0 :(得分:0)

我认为您的value_provider函数的终止条件很差。

  • 不要尝试计算-1的斐波那契,因此n必须为>=1

  • 而且n为零后,您需要完成递归操作,不要 再次致电value_provider

尝试更多类似的方法;

int value_provider(int n)
{
  int choice1=-1;
  if(n>=1)
  {
     choice1 = fibonacci(n-1);
     n -- ;
  }
  printf("%d ",choice1);
  if(n>0)
  {
    value_provider(n);
  }
}