计算思维实践之路(五)
来源:互联网 发布:怎么在u盘中装ubuntu 编辑:程序博客网 时间:2024/06/07 18:11
7月31日,晴。“递归方便耗内存,来去自在汉诺塔“。
递归与非递归哪个省内存?
我本是西海龙王敖闰之子,唤名龙马三太子,驮师父往西天拜佛。我来做一道简单的。
例9 非负数n的阶乘,按以下公式
#include<stdio.h>int fn(int n) {if(n==0)//递归终止条件return 1;else//递归通式return n*fn(n-1);}int main() {int n;printf("请输入1个整数:");scanf("%d",&n);printf("%d!的阶乘是%d\n",n,fn(n));return 0;}
有一个梵塔-汉诺塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上。把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
分析:描述简化---把A柱上的n个盘子移动到C柱,其中可以借用B柱。
1、任务分析
2、算法构思
任务1、把A上的n-1个盘子移动到B: Hanoi (n-1,a,c,b); // 操作结束为状态1
任务2、把A上的大盘子移动到C move(a,c)
任务3、把B上的n-1移动到A Hanoi (n-1,b,c,a); //操作结束位状态2(和状态1相比只是规模变小)
3、代码实现有了神仙姐姐的分析,俺沙悟净写一下代码:
#include <iostream>using namespace std;void Hanoi(int n, char src,char mid,char dest)//将src座上的n个盘子,以mid座为中转,移动到dest座{if( n == 1) { //只需移动一个盘子cout << src << "->" << dest << endl; //直接将盘子从src移动到dest即可return ; //递归终止}Hanoi(n-1,src,dest,mid); //先将n-1个盘子从src移动到midcout << src << "->" << dest << endl; //再将一个盘子从src移动到destHanoi(n-1,mid,src,dest); //最后将n-1个盘子从mid移动到destreturn ;}int main() {int n;cin >> n; //输入盘子数目Hanoi(n,'A','B','C');return 0;}
0 0
- 计算思维实践之路(五)
- 计算思维实践之路(一)
- 计算思维实践之路(二)
- 计算思维实践之路(三)
- 计算思维实践之路(四)
- 计算思维实践之路(六)
- 计算思维实践之路(七)
- 计算思维实践之路(八)-深度优先搜索
- 计算与推断思维 五、表格
- 数值计算之五
- docker实践入门之五
- 从头学习计算机之计算思维(第一讲 计算,计算机与计算思维)
- PHP实践之路(五)PHP中的运算符
- 计算思维
- 计算思维
- 计算思维
- VC++ ADO开发实践之五
- 探索实践之软件构建(五)
- Binary Tree Level Order Traversal
- throw throws 区别
- HDU1022——Train Problem I(栈 stack)
- SGU 106 The equation(扩欧)
- UVA - 11039 Building designing
- 计算思维实践之路(五)
- 前端SEO
- YoMail批量删除邮件
- Android中CoordinatorLayout(协调布局)的使用
- 杭电2033问题
- post乱码、get乱码问题如何解决?
- Activity的启动模式
- Android Studio: Plugin with id 'android-library' not found
- 不使用SDK生成BSP手动建立zynq软件工程