非递归算法: 根据圆盘的数量确定柱子的排放顺序: 若n为偶数,按顺时针方向依次摆放 A B C; 若n为奇数,按顺时针方向依次摆放 A C B。 然后进行如下操作: (1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动 ...
分类:
编程语言 时间:
2018-01-21 13:52:41
阅读次数:
180
原创、转载请注明出处。 题意:经典的汉诺塔问题是有3根柱子,第一根柱子上有n个盘子,下面盘子比上面盘子大,要求把所有盘子移到第三根柱子上,过程中不能使得上面的盘子大于下面的盘子,且每次只能移动一个盘子,问最少需要多少步。 一开始想的是用普通递归,也就是状态空间搜索路径的方法,这样传的参数比较多。 在 ...
分类:
其他好文 时间:
2017-11-25 19:21:45
阅读次数:
150
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。当所有的黄金圆盘都重新摆放在另一根柱子上时,世界就将在霹 ...
分类:
编程语言 时间:
2017-11-21 20:50:07
阅读次数:
248
1 #include <iostream> 2 #include<string.h> 3 using namespace std; 4 int f(int i,char a,char b,char c) //定义一个函数为i个圆盘从a经过b全部套到a上的函数 5 { 6 if (i == 1) // ...
分类:
其他好文 时间:
2017-11-09 22:46:04
阅读次数:
128
我们在学习递归时,总会认识一个问题,那就是汉诺塔问题,问题很简单,A,B,C三根柱子,将盘子移来移去,要求小盘子必须在大盘子的上面,最后将所有盘子从一个柱子移动到另一个柱子;那么我们看只有一根柱子的时候 很简单直接将从from移动到to,不用借助中间的helper柱子; 那么此时有n个盘子;其实我们 ...
分类:
其他好文 时间:
2017-10-30 14:41:45
阅读次数:
164
package 汉尼拔;import java.util.*;public class 汉尼拔 { static Scanner sc=new Scanner(System.in); static int disk=sc.nextInt(); public static void main(Stri ...
分类:
编程语言 时间:
2017-10-22 23:40:10
阅读次数:
242
课后作业1:使用计算机计算组合数 (1)使用组合数公式利用n!来计算 程序设计思想: 设计并调用大数求阶乘的方法结合组合数公式计算组合数的值。 程序流程图: 程序源代码: //信1605-2 张晨阳 20160955/* * 设计目的:设计并调用大数阶乘方法来计算组合数。 */package hom ...
分类:
其他好文 时间:
2017-10-14 11:54:48
阅读次数:
315
一、计算组合数 1.设计思路: ①利用组合数公式计算(计算阶乘用循环) ②利用递推方法计算 ③利用递归方法计算 2.流程图: 3.程序代码 4.运行结果 二、汉诺塔问题 1.设计思路: ①输入汉诺塔层数 ②利用递归找出方法 ③利用move函数输出 2.流程图: 3.实验代码 4.运行结果 三、字符回 ...
分类:
其他好文 时间:
2017-10-14 01:40:48
阅读次数:
147
【程序设计思想】 将A座上盘子移到C座上,实现的操作:1,将A座上除最下面其余盘子移到B座上2,将A座上一个盘子移到C座上3,将B座上盘子移到C座上。 分别用两个函数实现两类操作,用hanio函数实现第一类操作,用move函数实现第2类操作,函数调用hanio(n,one,two,three)表示将 ...
分类:
其他好文 时间:
2017-10-13 23:46:07
阅读次数:
258