A-A+
以下程序的输出结果是【 】。 int fun(int *x int n) { if(n==0
问题详情
以下程序的输出结果是【 】。 int fun(int *x,int n) { if(n==0) return x[0]; else return x[0]+fun(x+1,n-1); } main() { int a[]={1,2,3,4,5,6,7}; printf("%dn",fun(a,3));}
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:10
题目中的fun()函数直接调用了自身,所以它是递归函数。函数中只有一条if语句,意思是:若n为0,则返回x所指内容(x[0]等价于*x),否则返回x所指内容加上fun(x+1,n-1)。即,当n>0时,fun(x,n)=x[0]+fun(x+1,n-1)=x[0]+x[1]+fun(x+2,n-2)=…=x[0]+x[1]+…+x[n];当n=0时,fun(x,n)=x[0];当n<0时,函数将无限循环递归调用下去,因为n-1下去永远也不会等于0。所以本题中fun(a,3)=a[0]+a[1]+a[2]+a[3]=12+3+4=10。故应该填10。