
int f(int x) { return ((x>0) ? x* f(x-1):2;int i;i=f(f(1))},执行过后i的值是多少
展开全部
月浪江湖 | 二级
你想算x的阶层吧,不过int f(int x)函数中z没有声明,递归调用中,第一个z=1*f(0);z也就是1啦,第二个z=2*f(1),而这时f(1)=1,所以z为2;后面的以此类推,看看C书中函数的递归调用,好好体会就行了。 追问可是main函数里 写的是f(3)啊 不是直接把f(3)带进去么。。。 赞同0| 评论 2012-3-6 01:16 wujdbdss100 | 四级
一、首先说明一下,你有个地方写错了,应该是:z=x*f(x-1);,你把“=”号写成了加号。
二、这道题有四次函数的递归调用:
(1)第一次递归是f(3),得z=3*f(2)。函数运行到这里时,进行第二次递归f(2),得z=2*f(1)。
同理,函数运行到这里时,进行第三次递归f(1),得z=1*f(0)。最后是第四次递归f(0),因为x==0,故return 1,即f(0)=1。到此时,递归函数触底反弹。
(2)所以z=1*f(0)=1,所以print输出z值1,return返回z值1;
同理,z=2*f(1)=2,print输出z值2,return返回z值2;z=3*f(2)=6,print输出z值6,return返回z值6(PS:这个return返回到main函数调用的位置,故,最后还会在main函数里print多一个6,而前面的三个return返回到的递归函数调用的地方)。
(3)综上,最后屏幕上输出的结果是1266。
你想算x的阶层吧,不过int f(int x)函数中z没有声明,递归调用中,第一个z=1*f(0);z也就是1啦,第二个z=2*f(1),而这时f(1)=1,所以z为2;后面的以此类推,看看C书中函数的递归调用,好好体会就行了。 追问可是main函数里 写的是f(3)啊 不是直接把f(3)带进去么。。。 赞同0| 评论 2012-3-6 01:16 wujdbdss100 | 四级
一、首先说明一下,你有个地方写错了,应该是:z=x*f(x-1);,你把“=”号写成了加号。
二、这道题有四次函数的递归调用:
(1)第一次递归是f(3),得z=3*f(2)。函数运行到这里时,进行第二次递归f(2),得z=2*f(1)。
同理,函数运行到这里时,进行第三次递归f(1),得z=1*f(0)。最后是第四次递归f(0),因为x==0,故return 1,即f(0)=1。到此时,递归函数触底反弹。
(2)所以z=1*f(0)=1,所以print输出z值1,return返回z值1;
同理,z=2*f(1)=2,print输出z值2,return返回z值2;z=3*f(2)=6,print输出z值6,return返回z值6(PS:这个return返回到main函数调用的位置,故,最后还会在main函数里print多一个6,而前面的三个return返回到的递归函数调用的地方)。
(3)综上,最后屏幕上输出的结果是1266。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询