猿问

关于程序设计if的问题,具体情况如下所示~

A.5
B7
C8
D10
原题如下:当N=5时,下列函数的返回值是:
int foo(int n){
if(n <= 2)
return n:
return foo(n-1)+f(n-2);
}


慕森王
浏览 186回答 3
3回答

慕妹3146593

这是一个 类似于 斐波那契数列 的数列当 n <= 2 时,foo(n) = n当 n > 2 时,foo(n) = foo(n - 1) + foo(n - 2)所以:foo(1) = 1;foo(2) = 2;;foo(3) = foo(2) + foo(1) = 3;foo(4) = foo(3) + foo(2) = 5;foo(5) = foo(4) + foo(3) = 8;后面的以此类推&nbsp;

GCT1015

这个答案是选C的。递归都是完全可以转化为数学里面的数列来做的,他们都是有一定规律的。你仔细看看,就会发现foo(n)= foo(n-1)+f(n-2)。而当n=1的时候,foo(1)=1当n=2的时候,foo(2)=2所以很容易就推出:foo(3)=foo(2)+foo(1)=2+1=3foo(4)=foo(3)+foo(2)=3+2=5foo(5)=foo(4)+foo(3)=5+3=8所以答案选择C。

慕慕森

说下我的理解吧首先这个题目最下面 return foo(n-1)+f(n-2); &nbsp;后面的这个f()方法应该是印错了;正确的题目应为:当n=5时,下列函数的返回值是:int foo(int n){if(n <= 2)return n:return foo(n-1)+foo(n-2);}先说下 这个foo()方法大致的意思吧:传入初始数据 n=5;往下走 判断 n是否大于等于2 ;结果5大于等于2 跳出 if方法;继续走下面的方法 foo(5-1)+foo(5-2); &nbsp;得出 foo(4)+foo(3);那我们怎么知道 方法foo(4)+foo(3)等于多少呢?那就继续把参数传进方法计算出结果看看不就知道了吗?!先计算 foo(3) :传入初始数据 n=3;往下走 判断 n是否大于等于2 ;结果3大于等于2 跳出 if方法;得出 foo(2)+foo(1);那么还是没计算出结果! 继续!计算 foo(2):传入初始数据 n=2;往下走 判断 n是否大于等于2 ;结果2等于2 执行 &nbsp;if方法;得出 foo(2) 的 结果为 2;可以得出 :当 n <= 2 时,foo(n) = n当 n > 2 时,重新执行方法foo(n) = foo(n - 1) + foo(n - 2)foo(3)=foo(2) + foo(1)= 3;foo(4)= foo(3) + foo(2)= 5;foo(5)= foo(4)+ &nbsp;foo(3)= 8;
随时随地看视频慕课网APP
我要回答