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;
}
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 和斐波那契数列类似,斐波那契数列是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]