全部问题 > 当前问题

为什么是三次?

上善若水 2016-3-2 10:03:52

共 1 个回答

嘿嘿大人 2016-3-2 10:56:54

第一次,fun(3)第二次,fun(2)第三次,fun(1),一共三次

问题来自: 递归函数
设有如下函数定义
int fun(int k)
{ if(k<1) return 0;
  else if(k==1) return 1;
  else return fun(k-1)+1;
}
若执行调用语句:n=fun(3);,则函数fun总共被调用的次数的是 ______ 。
A. 2
B. 3
C. 4
D. 5
答案:B
解析:根据else的就近原则,把代码整理之后结果如下: if(k&lt;1) return 0; else { if(k==1) return 1; else return fun(k-1)+1; } k=3时,k&lt;1为假,k==1为假,执行return fun(2)+1。 k=2时,k&lt;1为假,k==1为假,执行return fun(1)+1。 k=1时,k&lt;1为假,k==1为真,return 1,返回fun(2),返回fun(3)。所以一共调用了3次,因此选B。