2016 - 2025

感恩一路有你

汉诺塔递归算法c语言 汉诺塔递归算法?

浏览量:2192 时间:2021-03-11 21:17:09 作者:admin

汉诺塔递归算法?

1//河内塔

2#包括和酒店。H>

3 void Hanoi(int n,char a,char b,char c)//这里表示在b列的帮助下将a列上的图版移到c列

4{if(1==n)//如果是图版,将a列上的图版移到c列

5{

6 Printf(%c-->%cn,a,c)

7}

8 else

9{

10 Hanoi n-1,a,c,b)//move n-1 plates on column a to column B with the column C

11 printf(%C-->%Cn“,a,C)//将a列的最后一块板移到C列

12 Hanoi(n-1,B,a,C)//然后将B列的n-1板移到C

13}

14}

15 int main()

16{int n

17 printf输入磁盘数:”)

18 scanf(%d“,&n)

19 Hanoi(n,%a”,%B“,%C”)

20 return 0

21}

复制代码

使用三层结构对其稍加修改?#include<iostream>using namespace stdconst int N=4void move(char from,char to){ 输出<< “from ”<<from<< “to ”<<to<<endl}void hanoi(int N,char p1,char p2,char p3){ 移动(N==1) 移动(p1,p3) 移动(N-1,p1,p3,p2) 移动(p1,p3) 移动(N-1,p2,p1,p3) }} 让河内塔板移动是D1,D2,D3,。。。DN从上到下,和(n>0)注意,第一个k板是s(k)(k>1)。递归的思想是假设前n-1块板是s(n-1),把板从a移到C,具体的移动方法是:(1)s(n-1):a=>B(2)DN:a=>C(3)s(n-1):B=>C实际上是一个具有四个参数f(n,a,B,C)的函数。第一步和第三步实际上又回到了n-1层河内塔的问题。以第一步为例,将前n-2块板看作一个整体s(n-2),问题就变成了将板从a移到B,此时需要用C作为桥。移动方法如下:(4)s(n-2):a=>C(5)d(n-1):a=>B(6)s(n-2):C=>B。实际上,(1)、(2)、(3)的步骤没有区别,但是[bridge]B和C是交换的:通过(1)、(2)、(3)总结出函数式:(1)f(n-1,a,C,B)//参数a是原来的位置,C是桥,而B是目的地(2)n:a=>C//从原位置取底板=>目的地(3)f(n-1,B,a,c)//参数B是原位置,a是桥,c是目的地,实际上所有递归算法都可以转化为非递归算法。一些低级语言(如汇编)没有递归算法。

汉诺塔递归算法c语言 汉诺塔递归算法图解 汉诺塔c语言程序详解

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。