BudingZY 发表于 2022-1-18 17:19:59

C语言小白;卷子上的一道题不会,请教大家。

代码如下,我正在学习c语言,目前学的有点费解,这是卷子上的一道题,答案是13,自己打一遍的结果也是13,但我想不明白为什么。有大佬帮忙解答一下吗?

#include <stdio.h>

int f(int n){
       
        if (n == 0){
                return 1;
        }
        if (n == 1){
                return 1;
        }
        return f(n-1)+f(n-2);
       
}

int main(){
       
        printf("%d", f(6));

        return 0;
       
}

大马强 发表于 2022-1-18 17:32:26

f(n-1) + f(n-2); n = 6
(6-1) + (6-2) =5 + 3
n = 5                     n = 3
(5-1) + (5-2) = 4 + 2       (3-1) + (3 -2) = 2 + 1
n = 4                     n = 2   
(4-1) + (4-2) = 3 + 2       (2-1) + (2 -2) = 1+0
n = 1 return 1            n = 0 return 1

然后就往上推,
n = 2 时 结果就是 1 + 1 = 2
n = 3 时 结果就是 2 + 1 = 3
n = 4 时 结果就是 3 + 2 = 5
n = 5 时 结果就是 5 + 3 = 8
n = 6 时 结果就是 8 + 5 = 13

翼是孤独 发表于 2022-1-18 18:54:10

和斐波那契数列类似,斐波那契数列是F(0) = 0 F(1) = 1
只求结果没什么意义,数学归纳法也能算出来。重点是递归 和 dp思想

这里有篇分析斐波那契数列的,建议你好好研究下
https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/solution/jian-zhi-offer-10-i-fei-bo-na-qi-shu-lie-1yxx/
页: [1]
查看完整版本: C语言小白;卷子上的一道题不会,请教大家。