这个为什么会是6呢,可以写个详细过程嘛

img


代码
#include <stdio.h>
int f(int a[],int n)
{
if(n>1)return a[0]+f(&a[1],n-1);
else return a[0];
}
int main()
{
int aa[3]={1,2,3},s;
s=f(&aa[0],3);
printf("%d",s);
return 0;
}

这就是一个递归函数,计算数组所有元素的和
第一次递归,n为3,大于1,执行if语句,return 1+f(&a[1],2);递归的f函数是计算a数组第1个元素开始的总和,如此循环。当n=1时,执行else,返回的是数组的最后一个元素3,最终就是1+2+3

递归计算数组的和

f(&aa[0],3)return aa[0]+f(&aa[1],2)

f(&aa[1],2)return aa[i]+f(&aa[2],1)

f(&aa[2],1)return aa[2]

你可能会疑惑为什么return a[0],其实是aa[2],这是因为你传入参数的地址在变化