Превышен предел стека из-за повторной рекурсии - PullRequest
0 голосов
/ 01 октября 2018

Этот код предназначен для печати серии Фибоначчи с использованием рекурсии.Поэтому я решил разработать рекурсию вместо использования итерации, но как только я просто выполняю код и как только выполняется функция поставщика значений, появляется некоторая ошибка «ошибка сегментации».Я хочу сделать это только так ... Кто-нибудь может помочь?Я только начинающий, поэтому, пожалуйста, помогите и подбодрите меня ...

#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 голосов
/ 01 октября 2018

Я думаю, что ваша функция 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);
  }
}
...