- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PPT-07递推和递归思想
递推与递归思想 【任务 6.3】 A、B、C、D、E 五人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在湖边的树丛中找地方睡着了。日上三竿,A第一个醒来,他将鱼平分作五份,把多余的一条扔回湖中,拿自己的一份回家去了。B第二个醒来,也将鱼平分为五份,扔掉多余的一条,只拿走自己的一份。接着 C、D、E 依次醒来,也都按同样的办法分鱼。问五人至少合伙捕到多少条鱼?每个人醒来后看到的鱼数是多少条? 解题思路: 假定A、B、C、D、E 五人的编号分别为1、2、3、4、5,整数数组 fish[k] 表示第 k 个人所看到的鱼数。fish[1] 表示A所看到的鱼数,fish[2] 表示 B 所看到的鱼数…… fish[1] A所看到的鱼数,合伙捕到鱼的总数 fish[2]=(fish[1]-1)*4/5 B所看到的鱼数 fish[3]=(fish[2]-1)*4/5 C所看到的鱼数 fish[4]=(fish[3]-1)*4/5 D所看到的鱼数 fish[5]=(fish[4]-1)*4/5 E所看到的鱼数 写成一般式 fish [ i ] = ( fish [ i - 1 ] – 1 ) * 4 / 5 i = 2, 3, …,5 这个公式可用于知 A 看到的鱼数去推算 B 看到的,再推算 C 看到的,…….。现在要求的是 A 看到的。能否倒过来,先知 E 看到的再反推 D 看到的,……,直到A看到的。为此将上式改写为: fish[ i-1 ] = fish[ i ] * 5 / 4 +1 i = 5, 4,…,2 图6.1 五人合伙捕鱼程序NS图 图 6.1 的说明: //************************************ //* 程 序 名:6_1.cpp(五人合伙捕鱼) * //* 作 者:wuwh * //* 编制时间:2002年10月2日 * //* 主要功能:递推算法的实现 * //************************************ #include iostream // 预编译命令 using namespace std; int main() //主函数 { int fish[6]={1,1,1,1,1,1}; // 整型数组,记录每人 // 醒来后看到的鱼数 int i=0; do { fish[5]=fish[5]+5; for (i=4; i=1; i=i-1) { if ( fish[i+1]%4 !=0 ) break; // 跳出for循环 else fish[i]=fish[i+1]*5/4+1; } } while( i=1 ); fish[5]=fish[5]+5; for (i=4; i=1; i--) fish[i+1]%4 !=0 t f break; fish[i]=1+ fish[i+1]*5/4; do while( i= 1) int main() // 主函数 { // 主程序开始 int n; // 整型变量,n为盘数, cout 请输入盘数 n=; // 提示信息 cin n; // 输入正整数n cout 在3根柱子上移 // 输出提示信息 n 只盘的步骤为:endl; move(n,a,b,c); // 调用move函数 return 0; // 主函数结束 } // 以下函数是被主程序调用的函数 // 函数名:move // 输 入:m,整型变量,表示盘子数目 // p,q,r为字符型变量,表示柱子标号 // 返回值:无 void move(int m, char
文档评论(0)