zoukankan      html  css  js  c++  java
  • 【hanoi】hanoi移动次数和移动步骤

    #include<stdio.h>
    #include<stdlib.h>
    
    //移动次数
    int hanoi(int num)
    {
        static int all = 0;
        if (num == 1)
        {
            return 1;
        }
        else
        {
            all = hanoi(num - 1) * 2 + 1;
        }
        return all;
    }
    
    //移动步骤
    void  hanoi2(int num,char A,char B,char C)
    {
        if (num == 1)
        {
            printf("%c->%c
    ",A,C );
            return 1;
        }
        else
        {
    
            hanoi2(num - 1,A,C,B);
            printf("%c->%c
    ", A, C);
            hanoi2(num - 1, B,A , C );
        }
    }
    
    void main()
    {    
        printf("请输入汉诺塔层数!
    ");
        int num;
        scanf_s("%d", &num);
        printf("
    移动次数=%d
    ",hanoi(num));
        printf("移动方法如下
    ");
        hanoi2(num,'A','B','C');
        system("pause");
    }

      追求运行速度最好不用递归,追求代码简洁的话就用递归。

      循环能实现的,递归也能实现;用递归能实现的,循环不一定能实现。

      注意,在递归前执行的为顺序执行,在递归后执行的顺序为倒序。

  • 相关阅读:
    RIP 动态路由
    9.28 二叉树计数
    9.31 取数理论
    花园
    迟滞变化
    AutoHotkey之自问自答
    几种常见的滤波处理
    快速排序(Quicksort)
    浅谈VBA
    新的开始
  • 原文地址:https://www.cnblogs.com/wangliu/p/4137914.html
Copyright © 2011-2022 走看看