标题:[求助]请教一道递归函数的题目
只看楼主
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
 问题点数:0 回复次数:14 
[求助]请教一道递归函数的题目
fun(int x)
{ if(x/2>0) fun(x/2-2);
printf("%d",x);
}
main()
{ fun(20);
printf("\n");
}
程序的运行结果是 -1 2 8 20
fun(20)=fun(8)=fun(2)
然后怎么办?


搜索更多相关主题的帖子: 递归 函数 fun printf 
2006-10-06 15:12
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
得分:0 
fun(20)=>fun(8)=>fun(2)=>fun(-1)
打印出-1,接下来就递归回去,(-1+2)*2=2,(2+2)*2=8,(8+2)*2=20,结束!

头可断,发型不可乱;血可流,皮鞋不可不擦油;
2006-10-06 15:22
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

递归过程:
f(20)
{
f(8);
{
f(2);
{
f(-1);
{
函数递归结束;
printf("-1");
}
primtf("2");
}
primtf("8");
}
primtf("20");
}
/*每个递归函数都由子函数调用和本身的其他语句组成.这些都要一步一步执行完.*/


倚天照海花无数,流水高山心自知。
2006-10-06 16:12
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
得分:0 
f(-1);时(-1/2)<0,应该已经跳出循环了才对.怎么还会执行f(-1)这步呢?
2006-10-06 19:39
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
得分:0 
以下是引用inku在2006-10-6 19:39:24的发言:
f(-1);时(-1/2)<0,应该已经跳出循环了才对.怎么还会执行f(-1)这步呢?

fun(int x)
{ if(x/2>0) fun(x/2-2);
printf("%d",x);
}



fun(int x)
{ if(x/2>0)
{
fun(x/2-2);
printf("%d",x);
}
}

注意两者的区别


人生没有彩排,每天都是现场直播~~~
2006-10-06 20:31
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
得分:0 
Mr. nuciewth 讲的很清楚哦,递归过程是一层层进 然后一层层出

fun(int x)
{
if(x/2>0) //语句(1)
fun(x/2-2); //语句(2)
printf("%d",x); //语句(3)
}
如你分析,当f(-1);时(-1/2)<0 那么语句(2)就不执行了,而执行语句(3) ,即打印x的值" -1"
然后返回到f(2)中的语句(3)打印x的值 "2"
返回f(8)中的(3)语句打印x的值 "8"
返回f(20)中的(3)语句打印x的值 "20"
即:
-1 2 8 20

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-06 20:34
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
以下是引用inku在2006-10-6 19:39:24的发言:
f(-1);时(-1/2)<0,应该已经跳出循环了才对.怎么还会执行f(-1)这步呢?

当-1为参数传进去的时候,由于-1/2<0,所以不会继续递归下去,于是转而执行下一个语句,即输出-1.因此不是说f(-1);不会执行.
f(-1)
{
(-1/2<0)不成立,所以不会继续递归.
printf("-1"); //但这个还是会执行的.
}


倚天照海花无数,流水高山心自知。
2006-10-06 20:37
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
得分:0 
关于f(-1)执行的问题我已经搞懂,可是为什么要一层层出呢?我觉得输出-1是不是就应该结束了呢?
2006-10-06 20:58
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
得分:0 

没人能回答我吗?

2006-10-06 22:12
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

但f(-1)这个函数并没有结束的.


倚天照海花无数,流水高山心自知。
2006-10-06 23:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-94500-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.191160 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved