C语言程序,帮忙详细分析一下!

有以下程序
#include<studio.h>
int f(int t [ ],int n);
main()
{int a[4]={1,2,3,4},s;
s=f{a,4}; printf(”%d\n”,s);
}
int f(int t[], int n)
{ if (n>0) return t[n-1]+f(t,n-1);
else return 0;
}
程序运行后的输出结果是
A)4 B)10 C)14 D)6
看不懂,能分析一下吗?

选B,等于10。
首先是t[3]+f(t,3),也就是4+f(t,3);
然后是4+t[2]+f(t,2),算出来是7+f(t,2);
然后是7+t[1]+f(t,1),算出来是9+f(t,1);
然后是9+t[0]+f(t,0),算出来是10+f(t,0);
由于此时n=0,所以返回,结果为10。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-03
选B,等于10,这里面有个递归调用f函数,使数组a的各元素累加,4+3+2+1=10
第2个回答  2011-02-04
这个问题首先第五行应该是:s = f(a,4);
结果是10.
大致意思就是:先看int f(int t[], int n)这个函数,当n = 1时,则返回值是t[0] + f(t[],0),即是1 + 0 = 1;
n = 2时,返回值则是t[1] + f(t[],1),又因为f(t[],1)又是刚才n = 1的情况,所以是2 + 1 = 3;
。。。。。。
以此类推,其实就相当于 n++,即是1 + 2 + 3 + 4 = 10.
第3个回答  2011-02-07
这是个递归函数,正确答案是10,就是t[3]+t[2]+t[1]+t[0]=10

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网