以下程序的输出结果是【 】。 int fun(int *x,int n) { if(n==0) return x[0]; else return x[0]+fun(x+1,n-1); } main() { in

admin2009-01-15  19

问题 以下程序的输出结果是【  】。
   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("%d\n",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。
转载请注明原文地址:https://kaotiyun.com/show/UQXp777K
0

最新回复(0)