| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3258 人关注过本帖, 3 人收藏
标题:今天无意中发现的一个很优美的递归
取消只看楼主 加入收藏
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
结帖率:81.25%
收藏(3)
已结贴  问题点数:100 回复次数:4 
今天无意中发现的一个很优美的递归
先上题吧:
输入两个最简分数a/b,c/d,求出所有分母<=n的介于两个分数之间的最简分数,保证a/b<c/d;

比如输入a=1,b=2,c=2,d=3,n=10

输入
5/9
4/7
3/5
5/8


[ 本帖最后由 czz5242199 于 2012-12-18 21:58 编辑 ]
搜索更多相关主题的帖子: 今天 
2012-12-18 21:50
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 3楼 wp231957
既然标题为优美就说明那个递归的方法很妙,你可以先尝试一下正常的写法
2012-12-18 22:02
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
补充一个忘了说的点是从小到大输出
2012-12-18 22:04
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 10楼 青春无限
给酱油女跪了!能不能换个词啊,除了“学习”和“看看”+一个表情
2012-12-18 23:01
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
我最开始遇到的题目是这样的:
按顺序输出所以分母小于等于n的最简分数

他的分析如下:
利用a/b<(a+c)/(b+d)<c/d,以0/1和1/1为两端点进行递归


程序代码:
void print(int a, int b, int c, int d, int n)
{
     if (b + d > n) return;
     print(a, b, a+c, b+d, n);
     printf("%d/%d\n", a+c, b+d);
     print(a+c, b+d, c, d, n);
}

然后外部调用print(0,1,1,1,n)即可输出答案


我之前以为这个函数可以任意调用,后来发现好像是只是用于(0,1,1,1)前4个参数,如果改变了参数的话一个是得到的数不一定是最简分数,这点倒可以通过约分解决,还有一点就是(b+d>n)有时候不一定意味着递归的结束,比如调用print(1,7,8,9,10),第一步递归就会结束,显然是错误的

所以,我对于自己随手改了一下的题目无法通过对这个递归进行修改解决了,不过他之前的那个解法确实挺优美的

至于杨大哥的那个递归解法没看大懂,42的问题是因为整除时约掉了尾巴导致可以进行递归的,不过不懂为什么可以得到正确的答案,求讲解
2012-12-20 18:02
快速回复:今天无意中发现的一个很优美的递归
数据加载中...
 
   



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

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