全部问题 > 当前问题

选择题求解释!!

设有如下函数定义
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

解析:根据else的就近原则,把代码整理之后结果如下:
if(k<1)
  return 0;
else
{
  if(k==1)
    return 1;
  else
    return fun(k-1)+1;
}
k=3时,k<1为假,k==1为假,执行return fun(2)+1。
k=2时,k<1为假,k==1为假,执行return fun(1)+1。
k=1时,k<1为假,k==1为真,return 1,返回fun(2),返回fun(3)。所以一共调用了3次,因此选B。


为什么是3次呢?第一次:F(3)一开始就调用;第二次:F(3-1)这是第二次;第三次:F(2-1)?

是这样的吗??

匿名课官 2016-9-20 18:15:21

共 1 个回答

最佳答案

嘿嘿大人 2016-9-20 19:56:50

是的,执行n=fun(3)的时候就代表调用了一次函数了