这道题c语言选择题怎么做的

这道题c语言选择题怎么做的详细过程

执行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。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-04
这是一个递归函数,假如递归有效的话,那么递归函数跳出的唯一条件就是n==1的时候,那么下面的的递归判断就不用看了,因为递归到最后n肯定是1,所以此时*s==2.
第2个回答  2018-09-01
x等于2
第3个回答  2018-08-31
f的初值是多少?
第4个回答  2018-08-31
很简单啊
第5个回答  2018-09-05
简单的理解 就是传值 和传址的区别,func中*s用来保存每次递归时的结果,一直到n被减为1 此时s内保存的值为2 ,然后逐次赋值给上一层的s(局部变量f),最终结果为2
相似回答