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

Stack limit exceeded due to repeated recursion

此代码是使用递归打印斐波那契数列。所以我想设计一个递归而不是使用迭代,但是只要我执行代码并且一旦执行值提供程序函数,它就会显示一些错误 "segmentation error"。我只想这样做......有人可以帮忙吗?我只是一个初学者所以请帮助和鼓励我...

#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);
}

此代码显示分段错误... 我该怎么做才能删除它而不是更改代码? 我只想这样做;请帮助!

我认为您的 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);
  }
}