**

C++实现汉诺塔以及勒让德多项式

**

1、汉诺塔的实现

问题描述:有三根针A,B,C。A针上有n个盘子,盘子大小不等,大的在下,小的在上。要求把这n个盘子从A针移动到C针,在移动过程中可以借助B针,每次只允许移动一个盘子,且在移动过程中在三根针上都保持大盘在下,小盘在上。
分析:假设A针上只有一个盘子,那么就直接移动到C针上就可以了。考虑A针有两个盘子,就需要先把上面的的小盘先移动到B针上,再将大盘移动到C针,最后把B针上的小盘移动到C针上。那么对于有n(n>2)个盘子思路还是一样,先把上面的n-1个盘子移动到B针(借助C针),再把最后一个大盘移动到C针(不这样做的话最后的大盘没地方放啊!!)。再将B针上的n-1个盘子移动到C针(借助A针)。代码实现如下:

#include <iostream>using namespace std;void move(char first,char second){cout << first << "-->" << second << endl;
}
//n表示有多少个盘子
void hanoi(int n,char left,char mid,char right){if (n==1)move(left,right);else{//先将n-1个盘子移到B盘上 hanoi(n-1,left,right,mid);move(left,right);//再将n-1个盘子从B盘移到C盘 hanoi(n-1,mid,left,right);}
}
int main(){int m;cout<<"输入需要从A盘移动到C盘的数量:";cin>>m;cout<<"移动顺序为:"<<endl;hanoi(m,'A','B','C');return 0;}

测试结果如下:

int main(){int m;cout<<"输入需要从A盘移动到C盘的数量:";cin>>m;cout<<"移动顺序为:"<<endl;hanoi(m,'A','B','C');return 0;}输入需要从A盘移动到C盘的数量:4
移动顺序为:
A-->B
A-->C
B-->C
A-->B
C-->A
C-->B
A-->B
A-->C
B-->C
B-->A
C-->A
B-->C
A-->B
A-->C
B-->C

2、编写函数求n阶勒让德多项式的值

问题描述:

分析:由上面的公式我们可以看到,勒让德多项式的终止条件是n=0和n=1,当n>1的时候就会产生递归。所以有这个思想可以编写递归函数如下:

#include <iostream>
using namespace std;double taile(double n,double x);double taile(double n,double x){double f;if(n==0){f=1;}else if(n==1){f=x;}else{f = taile(n-1,x)*x*(2*n-1)/n-taile(n-1,x)*(n-1)/n;}return f;
}int main()
{double n;double x;cin >> n;cin >> x;cout<< taile(n,x);return 0;}

第一次写博客,有什么不对,或者大家不懂得地方欢迎讨论。

C++实现汉诺塔以及勒让德多项式相关推荐

  1. 2.2基本算法之递归和自调用函数_用栈算法递归解决汉诺塔问题

    今天博主收一下线性表的尾,最近我们要学习的内容是栈和队列板块,栈和队列板块分为两讲,第一讲也就是今天我们主要学习栈的相关知识,包括栈的定义.栈的顺序表示及实现,栈的链式表示,栈的应用举例,以及栈递归实 ...

  2. 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。

    最近几天在研究算法中一个比较基础且突出的问题,就是关于"递推关系式.递归.迭代.序列前k项和"之间的区别与联系. 一.斐波那契数列与差分方程 首先我们考察一个经典的算法,求斐波那契 ...

  3. 汉诺塔(三)_栈的应用

    问题 E: 汉诺塔(三) 时间限制: 3 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北 ...

  4. 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)

    前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...

  5. Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

    1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s== ...

  6. 技术图文:如何实现汉诺塔问题?

    背景 最近在辅导小孩们学习编程,在介绍函数递归时,最典型的就是汉诺塔问题了. 我在这里总结一下,以方便大家的学习. 汉诺塔问题源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在 ...

  7. 汉诺塔问题---小昝

    C语言 #include <stdio.h> void move(char A,char C){printf("%c ---> %c\n",A,C); }void ...

  8. 轻松理解汉诺塔问题(图解java描述)

    引言:(易于理解) 汉诺塔看似简单的几行代码,却蕴含着奇妙的算法.我从我个人学习的角度来说.我一开始理解了原理,但是编码不会编,这也就是所谓的眼高手低.多研究多在IDE(eclipse-java,VS ...

  9. 栈与队列5——汉诺塔问题(方案二)

    题目 汉诺塔问题的基础上,增加限制,必须得经过中间,不能直接从左到右或从右到左,求当塔有N层的时候打印最优移动过程和最优移动总步数 要求 法一:递归法 法二:非递归法,用栈来模拟 解析 法二:非递归法 ...

最新文章

  1. JavaScript初学者应注意的七个细节
  2. 无法连接MySQL_MySQL不能从外部 连接的解决方法
  3. Unsupported format or combination of formats) Failed to parse onnx model
  4. Android-6步教你自定义View
  5. python中的矩阵运算
  6. 反射中getDeclaredConstructors和getConstructors两个方法的区别,然后setAccessible什么时候用,作用是什么?
  7. Typescript常见三种函数类型
  8. SAP Spartacus split view控制同屏显示最大视图数的配置
  9. html使用element ui_Kendo UI for jQuery使用教程:自定义小部件(二)
  10. atitit. orm框架的hibernate 使用SQLQuery createSQLQuery addEntity
  11. java stream filter map collector使用
  12. CSS中z-index
  13. SqlServer驱动包不同,取出数据的编码居然不同
  14. multisim怎么设置晶体管rbe_怎么在multisim14里仿真电路
  15. Linux系统编程 -- 信号及signal函数
  16. java模拟洗衣机程序,JAVA洗衣机仿真程序实验报告及代码
  17. map和json数组以及JSON对象和的区别以及相互转换
  18. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
  19. h.264回顾——001
  20. Git SSL公钥密钥生成

热门文章

  1. 物通博联工业网关串口接法|端子口接线方式
  2. python幂函数_解决python中的幂函数、指数函数问题
  3. html支持草书的字体吗,css怎么设置草书字体
  4. java抢答器实现思路,汇编实现竞赛抢答器 | 术与道的分享
  5. 为什么消费返利模式层出不穷?这个消费返利玩法值得你借鉴
  6. project 2007项目管理软件
  7. 转:Adobe Audition(Cool Edit) 用PC 录制翻唱歌曲
  8. Qt 多国语言的实现
  9. 计算机上面的字母代表什么意思,显卡前后字母代表什么意思?
  10. 久帝锻炼法脱颖而出,轻松绿色健康解决男人问题