递归-汉诺塔

简介: 问题描述算法复杂度2的n次方再减1n为盘子的个数算法实现#include #include /** 汉诺塔问题*/void hanoi(int n,char A, char B, char C){ ...

问题描述

img_f6fafe7d3a8255171582caabcbde86cd.png

算法复杂度

  • 2的n次方再减1
    n为盘子的个数

算法实现

#include <stdio.h>
#include <stdlib.h>

/**
    汉诺塔问题
*/
void hanoi(int n,char A, char B, char C){
    if(1==n) //如果是一个盘子,直接将盘子从A柱子移到B柱子上
        printf("将编号为%d的盘子从柱子%c移到柱子%c\n",n,A,C);
    else{
        hanoi(n-1,A,C,B); //将A上的n-1个盘子借助C移到B
        printf("将编号为%d的盘子从柱子%c移到柱子%c\n",n,A,C); //直接将A柱子上的第N个盘子移到C柱子上
        hanoi(n-1,B,A,C); //将B柱子上的n-1个盘子借助A移到C
    }
}

int main()
{
    //模拟三个柱子
    char chA='A';
    char chB='B';
    char chC='C';
    //盘子个数
    int n;
    printf("请输入需要移动盘子的个数:");
    scanf("%d",&n);
    hanoi(n,chA,chB,chC);
    return 0;
}

运行结果

3个盘子

img_85990d1121a819565f49708f75f6e7ac.png

2个盘子

img_14f3a34bfa13b8a9229fdf1fe3e6b3eb.png

1个盘子

img_1df57a56901795434d60c0254eaff166.png

5个盘子

img_adb7d415a96f87277c4d8abe81a9e7f8.png
目录
相关文章
|
6月前
|
算法 C语言
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
65 0
|
7月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
108 0
|
7月前
递归求解汉诺塔问题(超详解)
递归求解汉诺塔问题(超详解)
110 0
|
7月前
|
机器学习/深度学习
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
58 0
汉诺塔 递归问题
汉诺塔 递归问题
85 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
116 0
递归问题的实际运用:汉诺塔问题
|
C++ C语言
你是真的“C”——函数递归详解汉诺塔
利用函数递归手把手求解汉诺塔
110 0
你是真的“C”——函数递归详解汉诺塔
|
C语言
【C】青蛙跳台阶和汉诺塔问题(递归)
【C】青蛙跳台阶和汉诺塔问题(递归)
126 0
【C】青蛙跳台阶和汉诺塔问题(递归)
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
246 1
汉诺塔(递归+ 非递归版)