【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\n",A,C );
        return 1;
    }
    else
    {

        hanoi2(num - 1,A,C,B);
        printf("%c->%c\n", A, C);
        hanoi2(num - 1, B,A , C );
    }
}

void main()
{    
    printf("請輸入漢諾塔層數!\n");
    int num;
    scanf_s("%d", &num);
    printf("\n移動次數=%d\n",hanoi(num));
    printf("移動方法以下\n");
    hanoi2(num,'A','B','C');
    system("pause");
}

  追求運行速度最好不用遞歸,追求代碼簡潔的話就用遞歸。spa

  循環能實現的,遞歸也能實現;用遞歸能實現的,循環不必定能實現。code

  注意,在遞歸前執行的爲順序執行,在遞歸後執行的順序爲倒序。blog

相關文章
相關標籤/搜索