| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1492 人关注过本帖
标题:[求助]请教一道递归函数的题目
只看楼主 加入收藏
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
快速回复:[求助]请教一道递归函数的题目
数据加载中...
 
   



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

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