问一下这个最后一个填空是fib(g-2)+fib(g-1)
。但是7传过去判断没有7就执行case0,然后遇见return就结束了,这个就不会执行后面的递归啊
一般格式是
switch (g)
case 0:
return;
case 1:
return;
default:
//TODO
因为你没有default段,
所以7的时候,他case都不符合,就出去了,
所以执行了外面的return
switch只是选择,只是这个函数中一部分,执行完选择肯定接着执行下一步啊
你没有 default,所以如果都不匹配,自然执行后面的。
参考GPT和自己的思路:
对于这个问题,需要理解 switch case 语句和递归调用的执行顺序。
在 switch case 语句中,根据传入的参数值,程序会找到匹配的case语句并执行,如果没有匹配的case语句,就会执行default语句(如果有的话),或者跳过整个 switch 语句继续向下执行。
在这个例子中,当传入的参数值为7时,程序没有匹配到任何case语句,因此会执行default语句。在default语句中,只有一个return语句,这条语句会导致程序立即返回,不会执行后面的任何语句,包括递归调用语句。
因此,在传入参数值为7时,程序会直接返回,不会执行后面的递归调用语句fib(g-2)+fib(g-1)。
但是,当传入参数值为0、1、2时,程序会分别执行对应的case语句,并在case语句中调用fib函数,这会导致程序不断地递归调用,直到传入参数g的值小于等于2,此时程序会执行if语句中的return语句,返回对应的值。因为递归调用的退出是基于递归的实参的值依据当前的过程(例子中的 fib)的结束控制,所以,当传入参数值不为7时,程序会执行递归调用。
结果应该是return (fib(g-2)+fib(g-1));
这个结果要用括号括起来,不然只会返回第一个fib(g-2)的值,加号不会生效!