C的递归和return,有个题,写下步骤吧

来源:百度知道 编辑:UC知道 时间:2024/06/03 11:19:00
#include<stdio.h>
int f(int n)
{
int t,v;
if(n<2)
{
printf("%d\n",n);
return (n);
}
t=n/2;
v=f(t);
printf("%d\n",n);
return(t+v);
}
main()
{
pritnf("result=%d\n",f(13));
}

做到:
t=3/2=1
v=f(1)
然后if(1<2)
再是不是
{
printf("%d\n",n);
return (n);
}
然后输出1,return(1)
再回到v=f(1),然后就不会了。

写下大概的步骤和最后的输出结果。

做到:
t=3/2=1
v=f(1)
然后if(1<2)
再是不是
{
printf("%d\n",n);
return (n);
}
然后输出1,return(1)
再回到v=f(1),然后就不会了。

f(13)
t=13/2=6 v=f(t)
f(6)
t=6/2=3 v=f(t)
f(3)
t=3/2=1 v=f(t)
f(1)
printf("%d\n",n)``输出1
return (n) 返回1
所以
f(1) =1
printf("%d\n",n)`输出3
f(3)=f(1)+t=1+1=2
printf("%d\n",n)`输出6
f(6)=f(3)+3=5
printf("%d\n",n)`输出13
f(13)=f(6)+6=11;

结果是
1
3
6
13
result=11