C语言 递归程序 求解

求各位哥哥,解答一下,写一下这个递归程序的计算过程,还有计算递归有什么好方法吗?希望讲解一下 ,谢谢!

递归函数就是做了一件事:求和
递归过程如下:
第一次进入:n==3, 执行的是 p[0]+f(&p[1],2);这样的话会继续调用函数f,也就有了第二次进入。
第二次进入:表达式变成了p[0]+p[1]+f[&p[1],1],这样的话会继续调用函数f,也就有了第三次进入。
第三次进入:n==1, p[0]+p[1]+p[2].
return (p[0]+f(&p[1],2)=p[0]+p[1]+f[&p[1],1]=p[0]+p[1]+p[2])-->return p[0]+p[1]+p[2]
递归一般是出于效率的要求,当然你这个没什么影响。递归也不是用在这里的。看递归要干什么很简单,看两点:1.递归退出条件是什么,退出时的返回值;2.递归时在做什么。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-29

递归的意思就是说,原本我要写一大堆函数,每个函数内语句都一致,然后嵌套调用,简单写将这些重复内容的函数写成一个,用递归方式调用。在理解和解析时,可以这么考虑:每次调用的函数都是独立的,参数即使同名,但对于每次调用函数本身与其他函数是独立的,函数内部定义的变量值也独立不会互相干扰。

s=f(&aa[0],3); //调用f函数,等待返回值,f执行结束后再赋值
  f1(p=&aa[0],n=3 ): n>1成立,p[0]+f(&p[1],n-1); //等待新调用的f函数返回,然后继续执行
  因为p指向aa[0],因此p[0]就是aa[0],p[1]为aa[1]
    f2(p=&aa[1],n=2): n>1成立,p[0]+f(&p[1],n-1);
      f3(p=&aa[2],n=1): n>1不成立,return p[0]; 返回aa[2]的值
    f2(p=&aa[1],n=2): p[0]=aa[1]=4,f(&p[1],n-1)=aa[2]=6, 返回10
  f1(p=&aa[0],n=3 ): p[0]=aa[0]=2,f(&p[1],n-1)=10, 返回12 //前面提到的f返回了,因此继续执行
s=12赋值完成
printf输出12换行

相似回答