zoukankan      html  css  js  c++  java
  • 汉诺塔(经典递归)(未完全明白)

    作为经典递归的汉诺塔算法题, 迄今为止这是第二次被虐的,然而更惨的是还是没有虐明白,当然比第一次要理解的略深一点,这是唯一可以欣慰的,分析如下:

    递归这种东西,不能深钻,很容易被各种逻辑搞混,所以要用一种大局观去解决问题,基本上整个汉诺塔分为四部分:

    1.把A上的n-1个通过C移动到B上

    2.把A上的最后一个移动到C上

    3.把B上的n-1个通过C移动到A上

    4.把B上的最后一个移动到C 

     1 #include "stdafx.h"
     2 #include <stdlib.h>
     3 int i = 0;
     4 void Print(int n,char a,char b,char c)
     5 {
     6     //相当于1.3步骤
     7     if(n == 1)
     8     {
     9         i++;
    10         //虽然是执行2个步骤的输出,但是因为递归的输入已经包含了字符的变换,所以一行即可表示(程序的魅力啊!)
    11         printf("这是第%d步,从%c->%c
    ",i,a,c);
    12     }
    13     //
    14     else
    15     {
    16         //每次递归传参,b、c调换位置
    17         Print(n - 1,a,c,b);
    18         i++;
    19         //同上,但是还是没有理解为什么这个输在在这步而不是在下面那个递归的后面
    20         printf("这是第%d步,从%c->%c
    ",i,a,c);
    21         //每次传参a,b调换位置
    22         Print(n - 1,b,a,c);
    23     }
    24 
    25 }
    26 int _tmain(int argc, _TCHAR* argv[])
    27 {
    28     int n;
    29     printf("请输入盘子数:");
    30     scanf("%d",&n);
    31     Print(n,'A','B','C');
    32     system("Pause");
    33     return 0;
    34 }

    作为一个小白,真是被虐惨了...等过几天再被虐一次看看行不行!!

  • 相关阅读:
    阅读笔记——增强学习3
    阅读笔记——增强学习2
    阅读笔记——增强学习1
    阅读笔记十六
    阅读笔记十五
    MVC实例应用模式
    MVC浅谈
    设计模式理解
    某系统质量属性设计实现详述
    《大型网站架构》浅读有感
  • 原文地址:https://www.cnblogs.com/baikequanshu/p/3386572.html
Copyright © 2011-2022 走看看