#include “stdio.h”
int fun(int *x,int n)
{if(n==0) return x[0];
else return x[0]+fun(x+1,n-1);
}
void main()
{int a[]={1,2,3,4,5,6,7};
printf(“%d\n”,fun(a,3));
}
帮忙分析一下结果为什么会是10?
fun(a,3) x[0]+fun(a[1],2)
fun(a[1],2) x[0]+fun(a[2],1)
fun(a[2],1) x[0]+fun(a[3],0)
fun(a[3],0) x[0]
大家看一下是这样推的吗
>> 本文固定链接: http://www.vcgood.com/archives/2992
一个递归的问题!!
主要在 return x[0]+fun(x+1,n-1);
我知道是为什么了。
你的最后一步出错了。最后你的意思是输出a[0],其实不是。
if(n==0) return(x[0]);其中x[0]指的是*(x+0)
而你带入的是a[3],所以最后的结果是*(a+3+0),即a[3]
fun(a,3) x[0]+fun(a[1],2) /*这时x[0]等于a[0]也就是数字1*/
fun(a[1],2) x[0]+fun(a[2],1) /*这时x[0]等于a[1]也就是数字2*/
fun(a[2],1) x[0]+fun(a[3],0) /*这时x[0]等于a[2]也就是数字3*/
fun(a[3],0) x[0] /*这时x[0]等于a[3]也就是数字4*/