如何用matlab来求解汉诺(Hanoi)塔问题

作者&投稿:段干蝶 (若有异议请与网页底部的电邮联系)
C++解决 数学典型问题 Hanoi(汉诺)塔问题。~

这是利用了递归的。
将n个盘子分解成上边的n-1个和下边的1个。
这样就可以看成是两个盘子,然后再把其余过程递归。
那么对于这两个“盘子”来说,hanoi(n-1,one,three,two)是把上边的n-1个从one借助three移动到two;
再把下边的最大的盘子从one移动到three;
接着再把刚才的那堆“盘子”hanoi(n-1,two,one,three)从two借助one移动到three。
这样就移动完了,对每个大堆“盘子”一递归就把具体过程做出来了。

这个问题我当年摸索了2个多小时才彻底弄懂。。。分献给你。。


void move(char x,char y); /*对move函数的声明*/

if(n= =1)
move(one,three); //如果只有一个盘子,只需要将第一个搬到第三个柱子上就完成任务了
else//如果还有n(n != 1),只需要三步就可以完成
{
hanoi(n-1,one,three,two); //步骤1:把上面的n-1个通过第三个柱子搬到第二个柱子上去
move(one,three); // 步骤2: 把最下面的那个大盘子N移动到第三个柱子上去
hanoi(n-1,two,one,three);//步骤3: 把第二个柱子上面的n-1个盘子通过第一个移动到第三个柱子上去
}
}
void move(char x,char y) /*定义move函数*/
{
printf(“%c――>%c
”,x,y);; //move就不用多说了,cong柱子x到 y
}

新建如下m文件
function Hanoi(n,A,B,C)
%把n个盘子从A经C移到B
global countN;
if n==0
return;
end;
Hanoi(n-1,A,C,B); % 先把n-1个盘子经B移到C
disp(['第',num2str(countN),'步: ',A,'->',B]); % 再把A最后一个盘子移到B
countN = countN+1;
Hanoi(n-1,C,B,A); % 最后把n-1个盘子从C经A移到B

然后在命令窗口输入如下脚本:
clc;
global countN;
countN = 1;
Hanoi(3,'A','B','C');

function move(n,A,B)
if n == 1; disp(['Move ',num2str(A),' to ',num2str(B)]);
else move(n-1,A,6-A-B); move(1,A,B); move(n-1,6-A-B,B);
end

输入:
move(4,1,3)

结果:
Move 1 to 2
Move 1 to 3
Move 2 to 3
Move 1 to 2
Move 3 to 1
Move 3 to 2
Move 1 to 2
Move 1 to 3
Move 2 to 3
Move 2 to 1
Move 3 to 1
Move 2 to 3
Move 1 to 2
Move 1 to 3
Move 2 to 3


怎样使用Matlab 来求一个级数的和?
在Matlab中,我们可以使用内置函数来求解级数的和。这里我们以一个无穷级数为例,例如:求和 ∑(i=1 to ∞) (1\/i^2)。步骤如下:首先,我们需要定义一个函数来计算每一项的值。在这个例子中,我们的函数是 f(i) = 1\/i^2。然后,我们需要定义一个变量来存储级数的和。接下来,我们需要使用一...

如何用matlab求特征值?
使用matlab可以方便的计算任何复杂的方阵的特征值和特征向量:1、首先需要知道计算矩阵的特征值和特征向量要用eig函数,可以在命令行窗口中输入help eig,查看一下eig函数的用法,如下图所示:2、在命令行窗口中输入a=[1 2 3;2 4 5;7 8 9],按回车键之后,输入[x,y]=eig(a),如下图...

如何用matlab生成随机数函数
使用matlab里面的rand函数可以生成随机数函数。rand函数的用法 :(1)命令:rand(N),rand(M,N)等 (2)对于rand(N),通过help rand得到的解释是:R = rand(N) returns an N-by-N matrix containing pseudorandom values drawn from the standard uniform distribution on the open interval(0,1...

如何用matlab进行波函数求导?
第二种是对的。首先原函数中有一个隐含条件就是ω不能等于0(因为分母不能为0),而冲击函数的定义为:由此可断定冲激函数δ(ω) 只能等于0,所以算出来的最终结果应该是第二种。你第一种算法中最后一步既然你都让ω=0了,那后面的分解式1\/jω情何以堪 ...

Matlab中,乘积、点积、叉积有何区别?如何应用?
2、用matlab求矩阵的乘积,一般乘法:A*B,A、B代表两个矩阵。3、矩阵点乘:A.*B,即两矩阵的对应项相乘。4、三、用matlab求矩阵的逆矩阵,命令:inv(A)或A^-1,inv是英语单词inverse(逆向)的缩写。5、用matlab求行列式的值,命令:det(A),det是英文单词determinant(行列式)的缩写。

请问matlab里用zeros创建零矩阵有何用处呢?
最重要的一个用处就是预分配内存,加快程序速度,在老版本MATLAB中,一些程序预分配内存与否前后速度会差n多倍.

matlab中y 是什么意思
在matlab中,y通常用来表示因变量或响应变量。在函数中,y可以是输出或函数执行的结果。例如,当使用plot函数时,y表示数据在y轴坐标中的位置。在数学模型分析时,y可能表示某种依赖于另一个变量x的变量值。无论在何种情况下,y都是可以修改和控制的。通过修改变量x或参数,可以改变y的计算结果。因此,...

如何用matlab进行分位数回归?小白学习matlab处理数据从何开始
如何用matlab进行分位数回归?小白学习matlab处理数据从何开始 matlab自带的一些常用分布的分布律或概率密度。 如果把分布函数名的后缀cdf改为inv,便得到了相应分布函数的反函数.这些常用分布的分布函数及其反函数对于实际应用很方便。

matlab中surf函数与mesh函数在绘制三维曲面时有何区别?
总的来说,surf是MATLAB中描绘三维图形的得力助手,它擅长于捕捉曲面的美感与精确性。无论是研究数据的可视化,还是教学演示,surf都能以它独特的魅力,帮助你呈现出更生动的视觉体验。至此,关于surf函数的介绍就告一段落,期待它能在你的MATLAB旅程中增添一抹亮色。如果你有任何疑问或想深入探索,记得在...

怎么在matlab中画出xoy平面上的曲线?用plot3函数。。
有mesh何surf两种命令来画三维曲面,它们使用的场合不同。前者是当z轴是x和y的显式函数时,后者是x,y,z中某个为其他2个的函数。mesh函数 这里用柱面坐标表示为 r2+z2=1x = sqrt(1-z2)cosθ, x = sqrt(1-z2)sinθ;执行matlab指令:>> [theta, Z] = meshgrid((0:0.1:2)*pi, (...

金州区15598972795: 如何用matlab来求解汉诺(Hanoi)塔问题
郯关乐脉: 新建如下m文件 function Hanoi(n,A,B,C) %把n个盘子从A经C移到B global countN; if n==0 return; end; Hanoi(n-1,A,C,B); % 先把n-1个盘子经B移到C disp(['第',num2str(countN),'步: ',A,'->',B]); % 再把A最后一个盘子移到B countN = countN+1; Hanoi(n-1,C,B,A); % 最后把n-1个盘子从C经A移到B 然后在命令窗口输入如下脚本: clc; global countN; countN = 1; Hanoi(3,'A','B','C');

金州区15598972795: 如何用matlab实现汉诺塔的动画过程? -
郯关乐脉: 你是指求解汉诺塔还是动画?求解使用递归可以完成,至于动画直接使用画图的方式不就可以完成了吗?你不会想做3D动画吧,需要的话可以到xscreensaver的源程序包里把那个汉诺塔程序拿来看看.

金州区15598972795: 怎么用matlab解含有字母系数的方程组的解,举个简单例子 -
郯关乐脉: 用法以这个为例: x+A*y=10 x-B*y=1 其中x,y为变量,A,B为字母系数. 只要在Matlab中输入 syms x,y,A,B [x y]=solve('x+A*y=10','x-B*y=1','x','y') 即可求出解 x = (A + 10*B)/(A + B) y = 9/(A + B) 对于函数solve的具体用法,可以通过输入help solve来学...

金州区15598972795: 请问一个方程如何用MATLAB求解,1=t*e^(a*h)*a*h^2,要求h,其他都是已知数. -
郯关乐脉: %等式同时取自然对数为%0=ln(t)+ah+ln(a)+2ln(h)%假设a=2,t=0.3,则如下:y=inline('log(0.3)+2*h+log(2)+2*log(h)','h');x...

金州区15598972795: 如何用matlab解出此二元二次方程组?程序怎么写 -
郯关乐脉: 1、首先看一下matlab求解方程的方法,指明所解方程的变量,然后指明方程,未知数和限制条件,最后求解方程. 2、来求解sin(x)=1方程,在matlab命令行窗口中输入symsx [x,params,conds]=solve (sin(x)==1,'ReturnConditions', true) ,按回...

金州区15598972795: 求怎么用matlab解这个方程 -
郯关乐脉: 一般用matlab求解方程有两种方法:1、用软件自带的solve()函数、fsolve()函数、roots()函数等;2、利用数值分析的方法(如二分法,牛顿法等)自行编程其数值函数.所以,要根据具体的方程形式来选择合适的求解函数.请给以把具体的方程贴出来,以便于帮助你.

金州区15598972795: matlab要怎么解方程组 -
郯关乐脉: 比如解一道一元高次非线性方程,我们一般的解法是先确定方程的解所在的大致范围,然后用牛顿迭代法来算,很复杂. 这里我介绍用matlab来解方程,一个命令即可轻松得出方程的所有解. 工具/原料Matlab 解一元方程1 先举一例,解方程"x^2+100*x+99=0" 在matlab ”Command Window"中输入如下命令: x=solve('x^2+100*x+99=0','x') 见下图2 回车后,matlab就求出了这个一元二次方程的解.

金州区15598972795: matlab怎样求解一元二次方程 -
郯关乐脉: 一、工具:Matlab2012b 二、操作步骤: A.解一元方程【1】先举一例,解方程"x^2+100*x+99=0"在matlab ”Command Window"中输入如下命令:x=solve('x^2+100*x+99=0','x')见下图【2】回车后,matlab就求出了这个一元二次方程...

金州区15598972795: 如何用matlab求不同x值下对应的H -
郯关乐脉: 做过for循环,定义x范围,分别用fsolve函数求出根H,这样就做出来了 淘:费老师编程

金州区15598972795: 如何使用matlab求解非线性方程组的所有整数解 -
郯关乐脉: 这个并不好解.linprog是求解线性的.而还有一些开源包是求解0-1规划的.都不是很实用.我推荐一种方法来求解这种问题,希望给你帮助. 启发式搜索算法方程可以写成 f1(x1,x2,x3,...xi...xm) = 0 f2(x1,x2,x3,...xi...xm) = 0 ... fj(x1,x2,x3,...xi...xm)...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网