6个回答
展开全部
执行main:调用fun,传参(4、变量x地址)
首层fun :形参n=4,*s=x的地址(值0)。执行else{......}
首先函数递归调用自己,传参(4-1,首层变量f的地址),(*s=f这句要等前面递归完成才会执行)
递归1fun:形参n=3,*s=首层变量f的地址。执行else{......}
函数递归调用自己,传参(3-1,递归1变量f的地址)
递归2fun:形参n=2,*s=递归1变量f地址。执行else{......}
函数递归调用自己,传参(2-1,递归2变量f的地址)
递归3fun:形参n=1,*s=递归2变量f地址。执行*s=n+1;也就是递归2变量f的值变成2
此时递归完成,依次返回上层,继续执行对应的语句*s=f。
递归3完成后,递归2的变量f赋值2,然后返回递归2。
递归2执行*s=f,递归1的变量f赋值2。
递归1执行*s=f,首层变量f赋值2。
首层执行*s=f,变量x赋值2。
所以最后打印x的值2。
展开全部
这是一个递归函数,假如递归有效的话,那么递归函数跳出的唯一条件就是n==1的时候,那么下面的的递归判断就不用看了,因为递归到最后n肯定是1,所以此时*s==2.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x等于2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
f的初值是多少?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很简单啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单的理解 就是传值 和传址的区别,func中*s用来保存每次递归时的结果,一直到n被减为1 此时s内保存的值为2 ,然后逐次赋值给上一层的s(局部变量f),最终结果为2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询