70,037
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int f(int a[],int n)
{
if(n>1)
return a[0]+f(&a[1],n-1);
else
return a[0];
}
main()
{
int aa[3]={1,2,3},s;
s=f(&aa[0],3);
printf("%d\n",s);
}
第一次,n=3 >1,所以,return a[0]+f(&a[1],n-1) 即:1+f(2,2);
第二次,此时仅看1+f(2,2)中的f(2,2)。因为:n=2 >1,所以,再次:return a[0]+f(&a[1],n-1)即:2+f(2,1);
此处要注意的是a[0]=2。
第三次,方法同上,但是要注意的是a[0]=3;
最后,依次递推回去,就是3+2+1=6.
#include <stdio.h>
int f(int a[],int n)
{
if(n>1) return a[0]+f(&a[1],n-1);
else return a[0];
}
main()
{
int aa[3]={1,2,3} ,s;
s=f(&aa[0],3);
printf("%d\n",s);
}
画画图:
main: f(a,3):
进入f函数体,执行if(3>1)
应该返回 a[0]+f(&a[1],2):
也就是:
f(a,3) = a[0]+f(&a[1],2)
^
|
|
|
|
|
a[1]+f(&a[2],1)
^
|
|
|
|
a[2]//因为n==1,所以直接返回a[2];
然后倒回去:
也就是:a[0]+a[1]+a[2]
不知道够不够清楚!
#include <stdio.h>
int f(int*p,int n);
int main()
{
int aa[3]={1,2,3} ,s;
s=f(&aa[0],3);
printf("%d\n",s);
return 0;
}
int f(int*p,int n)
{
if(n>1)
return *p +f(p=p+1,n-1);
else
return 1;
}