天天看點

C語言 函數遞歸解決漢諾塔問題《經典》

C語言解決漢諾塔問題《經典》

首先要知道漢諾塔是怎麼一個問題

例如A 、B、 C 三個柱子,A柱子上假如放有三個盤子,最上邊是最小的,最下邊是最大的盤子;現在想讓A柱子借助B柱子将三個盤子移入到C柱子上,《且每次隻能移動一個盤子,而且要最後在C柱子上的盤子按從大到小依次堆起來》;這裡有用到函數,用函數遞歸實作了漢諾塔問題。

代碼實作如下:

// hanoi.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include "stdafx.h"

void hanoi(int n, char A, char B, char C)  //n代表盤子數
{
	if(n==1)
		printf("%c--->%c\n",A, C);
	else
	{
		hanoi(n-1, A, C, B);  //A繞過C去到B上
		printf("%c--->%c\n", A, C);
		hanoi(n-1, B, A, C);
	}
}
int main(int argc, char* argv[])
{
	hanoi(3, 'A', 'B', 'C');
	return 0;
}

           

例如代碼所示,如果是三個盤子,移動到C柱子上的步驟為:

C語言 函數遞歸解決漢諾塔問題《經典》

不管幾個盤子,這個代碼都可以實作。隻需要改變“hanoi(3, ‘A’, ‘B’, ‘C’);”裡的3數字即可

繼續閱讀