递减的斐波那契数

递减的斐波那契数

我很难理解递减的斐波那契数的递归,试图用手对其进行评估,但没有成功。

在评估代码时,我认为它将从以下内容开始:
(5,1,2)

但是,它始于:
(1、8、13)
(2、5、8)等

我在这里完全迷路了。有人可以解释为什么会这样吗?

#include <stdio.h>
#include <stdlib.h>


void fib_dec_a ( int n, int f1, int f2 ) {
    if ( n > 1 ){
        fib_dec_a ( n - 1, f2, f1 + f2 );
    }
    printf ("%d\n", f1);
}

int main () {
     int n;
     printf ( "Enter the length of descending Fibonacci sequence: " );
     scanf ( "%d", &n);
     printf ( "\nDescending sequence starting with an n-th element %d :\n", n );
     fib_dec_a (n, 1, 1 );
     return 0;
}


对于n = 6:
8
5
3
2
1个
1个

最佳答案

fib_dec_a是阻止呼叫;该函数完成其必须执行的所有指令后,才会继续执行。结果,为了达到n == 1的情况,必须先完成n == 2的情况。然后,同样适用于n == 3情况; n == 4情况必须先完成执行。

结果,将为较低值printf的所有n语句首先执行,因为其被调用方(n + 1)在执行之前等待返回。如果将printf语句移到if (n > 1)分支上方,则会发现顺序相反。

关于c - 递减的斐波那契数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34288045/

10-10 15:07