选择题求解释!!
设有如下函数定义
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)?
是这样的吗??