汉诺塔及递归

本文介绍了汉诺塔问题及其解决方案,通过递归算法实现圆片从起点A棒移动到目标C棒,中间借助B棒,遵循每次只移动一片且小圆片在大圆片之上的规则。详细解析了递归函数`hanoit`,并展示了移动过程的步骤。
摘要由CSDN通过智能技术生成

汉诺塔及递归


汉诺塔的编程解决算法:递归实现。什么是递归?

程序调用自身的编程技巧称为递归( recursion),例如:

void fun()

{

    fun();

}

递归在计算机中是怎么运行的,次序是怎样的?,如:

int main(void)

{

      fun();

}

递归,函数自己调用自己
递归函数要有返回的条件,就是不要一直循环下去。

int fun(int n)

{

if(n>0)

{        



              return n+fun(n-1);

}

else

{

             return 0;

}

}

int main(void)

{

      int sum = 0;

      sum = fun(10);

      printf("sum = : %d",sum);

}

int fun(int n)

{

if(n>0)

{         

              n = n+fun(n-1);

              return n;

}

else

{

             return 0;

}

}

3.汉诺塔编程算法

#include<stdio.h>
#include<stdlib.h>
static int count = 0;
void move(char getone, char putone) {

count ++;
printf("%c-->%c\n", getone, putone);

}

void hanoit(int n, char a, char b, char c) {
if(n == 1)
{
move(a, c);
}
else
{
hanoit(n - 1, a, c, b);
printf(“count :%d\n”,count);
move(a, c);
hanoit(n - 1, b, a, c);
}

}

int main() {
int m;

scanf("%d", &m);
hanoit(m, 'A', 'B', 'C');
printf("count :%d",count);

system("pause");
return 0;

}

在这里插入图片描述

上图中,有三根棒,左中右,分别命名为’A’,‘B’,‘C’,移动‘A’棒的圆片到‘B’棒上,代码执行为:move(‘A’,‘B’)

依次类推:如吧’C’棒移动到‘A’棒,为move(‘C’,‘A’)。

先从简单的开始,假设有三个圆片,最初从小到大放在A棒,移动之后,要从小到大依次放在C棒,圆片根据小到大命名:1,2,3

第一步,将1从A棒移动到C棒

第二步,将2从A棒移动到B棒

第三步,将1从C棒移动到B棒

第四步,将3从A棒移动到C棒

第五步,将1从B棒移动到A棒

第六步,将2从B棒移动到C棒

第七步,将1从A棒移动到C棒

此时,圆盘1,2,3按从小到大依次排列依次在C棒上,移动的过程中没有违背规则:不管在哪根棒上,小片必须在大片上面

void hanoit(int n, char a, char b, char c) {
if(n == 1)
{
move(a, c);
}
else
{
hanoit(n - 1, a, c, b);
printf(“count :%d\n”,count);
move(a, c);
hanoit(n - 1, b, a, c);
}

}

函数

void hanoit(int n, char a, char b, char c) {
if(n == 1)
{
move(a, c);
}
else
{
hanoit(n - 1, a, c, b);
printf(“count :%d\n”,count);
move(a, c);
hanoit(n - 1, b, a, c);
}

}

程序调用自身的编程技巧称为递归( recursion),例如:

void fun()

{

    fun();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值