C语言中,这条语句是什么意思?

#include (stdio.h)
int fun(int a[ ] , int n) //传入3和4对吗?
{
If (n>1)
return a[0] +fun(a+1 , n-1);//这行完全不理解!!
else
return a[0]; //输出数组a首地址?
}
main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10}; ,sum;
sum = fun(a+2 , 4);
printf("%d\n",sum);
} //结果是18?怎么来的我真的是,求大神告诉我这个fun是怎么运行的,晕了!万分感谢

这叫递归函数(自己调用自己)。递归只有执行到调用自己的地方,就会进入下一层。一层一层嵌套,直到某一层不再执行调用(对应这题就是n>1不成立的那一层)。
然后,从最后一层往前返回。
执行流程如下:
1、执行sum=fun(a+2,4);这里把a首地址往后偏移2位的数组传入(既3,4,5......的数组)。
所以,这里a[0]是3,n是4。n>1成立,执行调用进入下一层。
2、执行a[0]+fun(a+1,n-1);传4开头的数组,a[0]是4,n是3,成立,下一层。
3、同上,传5开头数组,a[0]是5,n是2,成立,下一层。
4、同上,传6开头的数组,a[0]是6,n是1,不成立,执行return a[0];
之后从最后一层往前返回:
4、返回a[0],也就是6。
3、返回a[0]+6,也就是5+6=11。
2、返回a[0]+11,也就是4+11=15。
1、返回a[0]+15,也就是3+15=18。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-16
这个是递归,自己调用自己
如果不懂递归自己去恶补下吧,学编程,递归是基础中的基础追问

好的,那可以帮我解决一下这个问题吗?

第2个回答  2020-05-17
fun(a+2 , 4)
=3+fun(a+3,3)
=3+4+fun(a+4,2)
=3+4+5+fun(a+5,1)
=3+4+5+*(a+5)
=3+4+5+6
=18
相似回答