Ряд Фибоначчи имеет некоторую ошибку во время выполнения - PullRequest
0 голосов
/ 18 марта 2019

[введите описание изображения здесь] [1] [здесь, когда я принимаю if(series==0) return 0; в функции определения Фибоначчи до if(series==1) return 1;, тогда серии Фибоначчи печатаются успешно, но когда я удаляю эту строку и затем компилирую свою программу, для этого требуется срок inout и затем показать сообщение об ошибке типа

Fibonacci.exe перестал работать но когда я добавляю эту строку, программа выполняется успешно. что происходит кто-нибудь скажет мне ] [2] вот мой код:

    #include<stdio.h>
int fibonacci(int);  // declaration of fibonacci function.

int main(){
    int input_num,i,series=1;
    printf("Enter the term you want to print fibonacci series : ");
    scanf("%d", &input_num);

    printf("\n Fibonacci Series Are : ");

    for(i=0; i<input_num; i++){
        printf("%d,", fibonacci(series));
        series++;
    }

    return 0;
}

//defination of fibonacci function
int fibonacci(int series){


    if(series==1) return 1;

    return(fibonacci(series-1)+fibonacci(series-2));

}

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Каждая рекурсивная функция нуждалась в каком-то базовом условии, чтобы сходиться.В программе Фибоначчи функция вызывается рекурсивно два раза fibonacci(n-1) и fibonacci(n-2).Здесь возможны два базовых случая, поэтому вы должны проверить оба варианта: 0 и 1.

: fibonacci (3) ==> fibonacci (1) + fibonacci (2)
fibonacci (2) ==> Фибоначчи (1) + Фибоначчи (0)

if(series==0) return 0;
else if(series==1) return 1;
else return(fibonacci(series-1)+fibonacci(series-2));
1 голос
/ 18 марта 2019
if (series==1) return 1;

Проблема в том, что вы также вызываете функцию с series-2, поэтому она может быть меньше единицы. Заменить на:

if (series<=1) return 1;

См. Также «Защитное программирование»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...