有人可以解释一下这段代码吗? 我无法理解为什么在此代码中打印值为8
有人可以向我解释
#include <stdio.h>
int f(int i){
switch (i){
case 0 :
return 0;
case 1:
case 2:
return 1;
default:
return f(i-2)+f(i-1);
}
}
void main(void) {
printf("%d", f(6));
}
答案 0 :(得分:6)
也许您只需要在调试运行中单步执行代码,但这就是您f(6)=8
step1: f(6)
step2: f(6-2) +f(6-1)
step3: f(4-2)+f(4-1) +f(5-2) +f(5-1)
step4: f(2) +f(3-2)+f(3-1)+f(3-2)+f(3-1)+f(4-2)+f(4-1)
step5: 1 +1 +1 +1 +1 +1 +f(3-2)+f(3-1)
step6: 1 +1 +1 +1 +1 +1 +1 +1
final: 8
答案 1 :(得分:3)
让我们考虑一个更简单的场景(为了缩短响应长度),如果我们调用参数为4的函数: f(4)
通过它我们发现:
我会推荐相同的过程,看看为什么f(5)的调用将返回5.然后使用f(4)= 3和f(5)= 5的事实,你可以理解为什么f(6 )= f(4)+ f(5)= 8.
答案 2 :(得分:1)
这是Fibonacci sequence的递归实现,其中每个数字是前面两个数字的总和。
switch语句的工作原理如下:
i
为0,则返回0 i
为1或2,则返回1 f(i-2)
和f(i-1)
的总和 - 这最终归结为上述两个基本情况。答案 3 :(得分:1)
这是一个递归函数,包含一个switch case。通常,在Switch案例中,您需要一个语句断开器,如中断或返回,以便只有特定情况才能正确执行。由于代码中case 1
和case 2
返回相同的值,即1代码分解为8 1的总和,最终总和为8。