c语言递归调用,以下程序的输出结果是?

#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); }

结果是6;
和你那个问题一样;递归一次指针后移一位;追问

我开始算的是这样,这不才是首地址a[0]一直在变吗

追答

int f(int a[],int n) //第一次调用
{
if(n>1)
return a[0]+f(&a[1],n-1);//a[0]对用的数组a[0]的位置;a[1]对应的是a[1];
else
return a[0];
}
int f(int a[],int n) //第二次调用
{
if(n>1)
return a[0]+f(&a[1],n-1);//注意这里,因为上一次调用给f函数的实参是a[1];所以这里a[0]就变成了数组的第二个元素;也就是数组中的a[1];
else
return a[0];
}

追问

嗯嗯知道a【1】一直在变,然后那个前面的a【0】就一直是1吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-09-17
就是数组求和啊,结果是6
相似回答