1. 程式人生 > >漢諾塔(C的經典遞迴習題)

漢諾塔(C的經典遞迴習題)

漢諾塔問題:設有三個塔座,依次命名為  x,y,z  。有  z  個直徑不同的圓盤,由小到大依次  編號為  1  、  2  、  ……  ,  n  。開始時,它們全部按遞減的次序插在塔座上。現要求按下列規則把  n  個圓盤按次序插放在  z  塔座上。

(  1  )  、每次只能移動一個圓盤;     

(  2  )  、圓盤可以從任一個塔座上移到另一個塔座上;

(  3  )  、任何時刻都不能把一個較大的圓盤壓在較小的圓盤上。

#include <stdio.h>
void move(int,char,char,char);
int main()
{
	int n;
	printf("輸入需要移動的盤子的個數:");
	scanf("%d",&n);
	move(n,'A','B','C');
	return 0;
}
void move(int n,char a,char b,char c)
{
	if(n==1){
		printf("把%d號從%c移動到%c\n",n,a,c);
	}else{
		move(n-1,a,c,b);
		printf("把%d號從%c移動到%c\n",n,a,c);
		move(n-1,b,a,c);
	}
}


相關推薦

Java 通過求解問題 原始碼 經典問題講解

漢諾塔問題描述:有三根柱子 A、B、C ,在A從下向上按照從大到小的順序放著64個圓盤,以B為中介,把盤子全部移動到C上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。 分析:為了將N個盤子從A移動到C,需要先把第N個盤子上面的N-1個盤子移動到B上,這樣才能將第

河內之C語言實現

#include <stdio.h> #include <stdlib.h> //河內之塔 遞迴實現 void hanoi(int n,char A,char B,char C); int main(int argc, char *argv[])

C經典習題

漢諾塔問題:設有三個塔座,依次命名為  x,y,z  。有  z  個直徑不同的圓盤,由小到大依次  編號為  1  、  2  、  ……  ,  n  。開始時,它們全部按遞減的次序插在塔座上。現

C語言解決hanoi問題——函式的呼叫

#include <stdio.h> void main() { void hanoi(int n,char one,char two,char three); int n; printf("請輸入需要移動的盤子數:\n"); scanf("%d",&n

python演算法和資料結構筆記--問題超詳細過程圖解堆疊資料結構

兩個盤子時:1移動到B,2移動到A,1移動到C N個盤子時:n-1移動到B,n移動到A,n-1移動到C 3個盤子為例子,如何將問題歸納為同類的子問題 我們的目標是的第一步先將1,2號盤子移動到B 當3號盤不存在,把B,C柱換個位置,問題轉化為將2個盤子藉助C移動到B子的問題。 要將1,2

問題的非非堆疊演算法

前一種方法的/*原理: 如果把三個柱子圍成一個環,盤子總數為N,其移動的規律是: 如果N為偶數:奇數號盤每次2步;偶數號盤每次1步; 如果N為奇數:奇數號盤每次1步;偶數號盤每次2步; 至於下一步該移動哪個柱子上的盤子,通過大小和順序即可判斷。  以上可以通過數學證明,不贅述

c語言實現程式執行步驟詳解

很久沒去接觸c語言了,今天翻了翻c語言的書,偶然間看到了大一時讓我鬱悶了很久的漢諾塔問題,又重新推理了一遍,漢諾塔的實現採用遞迴演算法,涉及到資料結構中的棧的知識。下面是c實現漢諾塔的原始碼。程式只是實現了文字資訊,即用文字描述了圓盤的移動過程,並未真正實現圓盤的移動,該程式

Hanoi問題&非C++實現及總結

漢諾塔(Hanoi)問題遞迴&非遞迴的C++實現及總結 由於剛入門不算很久,所以就那漢諾塔這種簡單問題來練下手啦~~ 【漢諾塔問題內容】(雖然路人皆知但還是寫一下好了。。。)   相傳在古印度聖廟中,有一種被稱為漢諾塔(Hanoi)的遊戲。

hanoi問題C++的實現

Hanoi(漢諾)塔問題。這是一個古典的數學問題,是一個用遞迴方法解題的典型例子。問題是這樣的:古代有一個梵塔,塔內有3 個座A、B、C,開始時A座上有64個盤子,盤子大小不等,大的在下,小的在上。有一個老和尚想把這64個盤子從A座移到C座,但每次只允許移動一個盤,且在移動過程中在3個座上都始終保持大盤在下,

閱讀遞迴函式最容易的方法不是糾纏於它的執行過程,而是相信遞迴函式會順利完成它的任務。如果你的每個步驟正確無誤,你的限制條件設定正確,並且每次呼叫之後更接近限制條件,遞迴函式總是能夠正確地完成任務。——《C和指標》 一、遊戲規則 有三個塔,第一個塔上放了若干個盤子。要將這若干個盤子

的應用——斐波那契數列、Java實現

package ch06; public class Fibonacci { public static int getNumber(int n) { if(n == 1) { return 0; } else if(n == 2){

SDUT OJ 1200

漢諾塔 Problem Description 漢諾塔(又稱河內塔)問題是印度的一個古老的傳說。 開天闢地的神勃拉瑪在一個廟裡留下了三根金剛石的棒A、B和C,A上面套著n個圓的金片,最大的一個在底下,其餘一個比一個小,依次疊上去,廟裡的眾僧不倦地把它們一個個地從A棒搬到C棒上,規定可

Python解決演算法

        move(1,a,b,c)                      把柱子a上最後1個盤子移到柱子c上        move(n-1,b,a,c)                   把柱子b上的n-1個盤子通過柱子a移動到柱子c上print move(4, 'A', 'B', 'C')

7-17 的非實現25 分附:

題目大意:略。 解題思路:如果考慮一下把64片金盤,由一根柱子上移到另一根柱子上,並且始終保持上小下大的順序。這需要多少次移動呢?這裡需要遞迴的方法。假設有n片,移動最少次數是f(n).顯

河內演算法的C語言實現

河內之塔(Towers of Hanoi)是法國人M.Claus(Lucas)於1883年從泰國帶至法國的,河內為越戰時北越的首都,即現在的胡志明市;1883年法國數學家 Edouard Lucas曾提及這個故事,據說創世紀時Benares有一座波羅教塔,是由三支鑽石棒(Pa

河內問題:

漢諾塔 medium 問題 http int logs 一行 移動 else     漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小

nyoj 1078 [二分圖 || 規律 || 暴力 || 貪心]

二分圖 二分圖匹配 int 處理 names 特殊 mes while 最小路徑覆蓋 題目:nyoj 1078 漢諾塔(四) 分析:做這個題目的時候是在圖論的題目裏面看到的。到時讀了題目推了一下,發現好像有點規律。試了一下果然過了。 後來看了一下數據,才50。那

++ 但是 logs 大片 scanf pan 兩種 初始 入棧 漢諾塔(三) 描述 在印度,有這麽一個古老的傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裏,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片

引起的對歸的思考

pan font 遞歸的理解 spa 底層 兩層 ont 中間 上層   對遞歸的理解在於放棄,放棄對於全程的理解與跟蹤,只理解遞歸兩層之間相互的聯系,以及遞歸終結的條件。 漢諾塔永遠只有兩層,最底層和上層,上層放到中間,底層放好,再把中間的放到底層上面!!! 就這樣,在亂

演算法之路----又稱河內之

漢諾塔是很簡單也很經典的演算法之一。 漢諾塔是根據一個傳說形成的數學問題: 有三根杆子A,B,C 。A杆上有N個(N>1)穿孔圓盤,盤的尺寸由下到上依次變小。要求按下列規則將所有圓盤移至C杆: * 1 每次只能移動一個圓盤; * 2 大盤不能疊在小盤上面。 提示:可將圓