下面程序的运行结果是【 】。 #inelude <stdio.h> int f(int a[],int n) { if(n>1) return a[0]+f(&a[1],n-1); else return a[0];

admin2009-01-15  23

问题 下面程序的运行结果是【  】。
   #inelude  <stdio.h>
   int f(int a[],int n)
   {  if(n>1) return a[0]+f(&a[1],n-1);
      else return a[0];
   }
   main()
   {  int aa[3]={1,2,3},s;
      s=f(&aa[0],3); printf("% d\n",s);
   }

选项

答案6

解析 已知aa[3]={1,2,3},n=3,调用函数f,n>1成立,执行a[0]+f(&a[1],n- 1);即1+f(&a[1],2),递归调用函数f,将a[1]的地址作为参数传给数组a,使数组a的首地址变为&a[1],数组中的元素只有2,3;2传给n,这时n=2,n>1仍然成立,继续调用a[0]+ f(&a[1],n-1);即执行1+2+f(&a[1],1),因为上次递归调用函数f后数组中的元素为2,3,所以此次的a[1]为3,调用后的a[0]为3。所以最后结果为1+2+3=6。
转载请注明原文地址:https://kaotiyun.com/show/MIXp777K
0

最新回复(0)