算法導論——漢諾塔(兩種遞歸結束條件)


#include<stdio.h>
#include<iostream>

using namespace std;

void HanoiRecursion1(int n, char a, char b, char c);//兩種遞歸的結束條件不同
void HanoiRecursion2(int n, char a, char b, char c);

int main ()
{
    int n = 3;
    HanoiRecursion1(n, 'A', 'B', 'C'); cout << endl;
    HanoiRecursion2(n, 'A', 'B', 'C');
}

void HanoiRecursion1(int n, char a, char b, char c)
{
    if(n == 1)
    {
        printf("move %d from %c to %c\n", n, a, c);
        return;
    }
    HanoiRecursion1(n - 1, a, c, b);//把n-1個盤子看做一個整體通過c移動到b柱子上 現在b柱子上有n-1個盤子
    printf("move %d from %c to %c\n", n, a, c);//把a的最后1個盤(最大的盤)移動到c
    HanoiRecursion1(n - 1, b, a, c);//把 b 上n-1個盤子通過 a 移動到 c 將n-1個盤子看做整體
}

void HanoiRecursion2(int n, char a, char b, char c)
{
    if(n > 0)
    {//用0階漢諾塔做循環的結束條件 此時什么都不需要做
        HanoiRecursion2(n - 1, a, c, b);//把n-1個盤子看做一個整體通過c移動到b柱子上 現在b柱子上有n-1個盤子
        printf("move %d from %c to %c\n", n, a, c);//把a的最后1個盤(最大的盤)移動到c
        HanoiRecursion2(n - 1, b, a, c);//把 b 上n-1個盤子通過 a 移動到 c 將n-1個盤子看做整體
    }
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com