Ниже приведен простой код, который пользователь дает число, и он находит последовательность Фибоначчи до этого числа. Вопрос в том, приведем ли мы, например, 5. Сначала он работает, пока не достигнет Nth_Fib_number = Fib_n(i)
. Затем он попадает внутрь подпрограммы и, поскольку i = 0; (из l oop основной программы), то res=0;
и возвращает res;
, что равно 0. Во-вторых, мы получаем i=1
; (из l oop основной программы) затем res=1
; и он возвращает res; а это 1.
Часть, которая меня смущает, теперь предназначена для i=2;
. Она проходит через подпрограмму и переходит на res=Fib_n(n-1)+Fib_n(n-2)
. Здесь res = 1 + 0, я думаю. После этого он переходит к res=1;
, а затем возвращает res;
Снова после этого он переходит к res=0;
и возвращает res;
После этого он возвращает res;
еще раз и переходит на main.
Проблема в том, что я не могу понять, что происходит в третьем л oop. Мы получаем res=Fib_n(2-1)+Fib_n(2-2);
, и после этого он снова вызывает себя и говорит, что res=1;
. Почему res получил равный одному? Кроме того, когда сразу же возвращается res, возвращается ли res со значением 3?
Я пытался отладить его, но мне не удалось увидеть переменные, которые я хочу.
Извините, за длинную статью. Спасибо за ваше время, ценим вашу помощь.
#include <stdio.h>
int Fib_n( int n);
int main( void )
{
int Nth_Fib_number, i, n;
printf("Give a number N, in order to get the Fib(N):\n");
scanf("%d", &n);
for (i=0; i<=n; i++)
{
Nth_Fib_number = Fib_n( i );
printf("%d: Fibonacci( %d ) = %d\n", i, i, Nth_Fib_number);
}
}
int Fib_n( int n)
{
int res;
if (n==0){
printf("%d",res);
res = 0;
}else
if (n==1)
res = 1;
else
res = Fib_n(n-1) + Fib_n(n-2);
return res;
}