遞歸學習,試下漢羅塔

遞歸算法,漢羅塔的例子,上課時感覺有點迷惑,後來翻了一下書,看來自己對遞歸果然不理解。遞歸,歸納總結後,總結出來的規律,從大問題轉向已知小問題求解。

漢羅塔中我們這個3個柱子,A,B,C然後,準備從A挪到B,把C當做中介,這樣我們不關心前面怎麼幹的,最後一定是A的最後一個挪到B,C上的是剩下的所有盤子。

好,算法理解,下面就是抽象,這個還是有點麻煩的,首先定義我們如何移動的,需要定義哪些關心的參數,A,B,C三個柱子,以及當前的盤子數N。

邊界條件是一定要有盤子,否則無法移動,n 必須大於0。

接下來就是輸出從哪個柱子到哪個柱子,盤子移動過去後就輸出。

// Hanoi.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include <iostream>
//漢羅塔的邏輯處理,A,B,C,如果從A到C
//1。將n-1個漢羅塔從A挪到B
//2.將最大的那個從A挪到C
//3.最後將n-1個漢羅塔從B挪到C
void MoveHanoi(int n,char cFromA,char cToB,char cTemp)
{
	if (n > 0)
	{
		MoveHanoi(n-1,cFromA,cTemp,cToB);
		printf("從%c挪到%c\n",cFromA,cToB);
		MoveHanoi(n-1,cTemp,cToB,cFromA);	
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	char cA = 'a';
	char cB = 'b';
	char cC = 'c';
	int n = 0;
	printf("please input a number\n");
	scanf("%d",&n);
	if (n < 0)
	{
		printf("number < 0\n");
	}
	MoveHanoi(n,cA,cB,cC);
	system("pause");
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章