欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言運用函數(shù)的遞歸實現(xiàn)漢諾塔

 更新時間:2022年07月08日 09:33:05   作者:hania_w  
遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個函數(shù)(然后可能又調(diào)用第三個函數(shù)等),最后又調(diào)用第一個函數(shù)。因為函數(shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結束條件

1、漢諾塔是如何實現(xiàn)的

下面是有三個盤子的示例:

從左到右一次是 A柱 B柱 C柱

A柱:起始位置

B柱:目標位置

C柱:過度位置

漢諾塔為題即是,將A柱上的所有盤子移動到B柱上,且每次只能移動一個盤子,并且小盤子必須在大盤子上面

2、漢諾塔問題畫圖詳解

下面的例子是以A柱為起始位置,B柱為中間位置,C柱為目標位置的

如果初始狀態(tài)下:A柱只有一個盤子:A->C

A柱有兩個盤子:A->B A->C B->C

A柱有三個盤子:A->C A->B C->B A->C B->A

B->C A->C

下面我們畫圖來詳細解釋一下初始狀態(tài)下為三個盤子的方法:

3、漢諾塔問題代碼解釋

//用c語言解決漢諾塔問題(函數(shù)遞歸)
#include<stdio.h>
//n:代表盤子的個數(shù)
//a:起始位置
//b:過度位置
//c:目的位置
void Move(char x1, char x2)
{
	printf("%c -> %c  ",x1,x2);//打印盤子的移動情況
}
void Hanoi(int n, char x1, char x2, char x3)
{
	if (n == 1)//遞歸的終止條件
	{
		Move(a, c);//當起始位置只有一個盤子時,直接將他挪到終止位置
	}
	else
	{
		Hanoi(n - 1, a, c, b);
		//將除掉最底部的一個盤子外,其余盤子通過起始位            
		//置A柱,過度位置C柱,最終移動到B柱上
		Move(a, c);//接著將A柱上的盤子直接移動到C柱上
		Hanoi(n - 1, b, a, c);
		//把B柱上的n-1個盤子,通過A柱,全部移動到C柱上
	}
}
int main()
{
	char a = 'A';
	char b = 'B';
	char c = 'C';
	int n = 0;
	printf("請輸入起始位置的盤子數(shù)目:>");
	scanf("%d", &n);
	Hanoi(n, a, b, c);
	printf("\n");
	return 0;
}

當A柱起始位置有三個盤子是與我們分析的結果是一樣的

總結

漢諾塔問題,需要用到遞歸思想,即從大到小考慮,

搞清楚每一步的起始位置與目標位置,巧妙借助過度位置的柱子去解決問題!

到此這篇關于C語言運用函數(shù)的遞歸實現(xiàn)漢諾塔的文章就介紹到這了,更多相關C語言漢諾塔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • VC6.0打開文件以及向工程中添加文件時程序崩潰自動退出解決方法

    VC6.0打開文件以及向工程中添加文件時程序崩潰自動退出解決方法

    vc6.0程序中,點擊打開文件以及向工程中添加文件時,程序竟然崩潰自動退出了,不知什么原因,安裝相同的vc程序,本本竟然出現(xiàn)此緣故
    2013-01-01
  • C++基于EasyX庫實現(xiàn)拼圖小游戲

    C++基于EasyX庫實現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細介紹了C++基于EasyX庫實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++中對象的賦值與復制操作詳細解析

    C++中對象的賦值與復制操作詳細解析

    對象之間的賦值也是通過賦值運算符“=”進行的。本來賦值運算符“=”只能用來對單個的變量賦值,現(xiàn)在被擴展為兩個同類對象之間的賦值,這是通過對賦值運算符的重載實現(xiàn)的
    2013-10-10
  • C++的內(nèi)聯(lián)函數(shù)你了解嗎

    C++的內(nèi)聯(lián)函數(shù)你了解嗎

    這篇文章主要為大家詳細介紹了C++的內(nèi)聯(lián)函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言 枚舉類型(Enum)詳解及示例代碼

    C語言 枚舉類型(Enum)詳解及示例代碼

    本文主要介紹C語言 枚舉類型,這里提供了詳細的相關資料及示例代碼,以便大家學習參考,有興趣的小伙伴可以參考下
    2016-08-08
  • C++詳細講解圖的遍歷

    C++詳細講解圖的遍歷

    圖的遍歷是指,從給定圖中任意指定的頂點(稱為初始點)出發(fā),按照某種搜索方法沿著圖的邊訪問圖中的所有頂點,使每個頂點僅被訪問一次,這個過程稱為圖的遍歷
    2022-05-05
  • C++11 std::function和std::bind 的使用示例詳解

    C++11 std::function和std::bind 的使用示例詳解

    C++11中的std::function和std::bind是函數(shù)對象的重要組成部分,它們可以用于將函數(shù)和參數(shù)綁定在一起,形成一個可調(diào)用的對象,這篇文章主要介紹了C++11 std::function和std::bind 的使用示例詳解,需要的朋友可以參考下
    2023-03-03
  • C++模擬實現(xiàn)string類的實例代碼

    C++模擬實現(xiàn)string類的實例代碼

    這篇文章主要給大家介紹了C++如何模擬實現(xiàn)string類,文章通過代碼示例講解的非常詳細,有完整的實現(xiàn)過程,具有一定的參考價值,需要的朋友可以參考下
    2023-08-08
  • C/C++可變參數(shù)函數(shù)的實現(xiàn)

    C/C++可變參數(shù)函數(shù)的實現(xiàn)

    這篇文章主要介紹了C/C++可變參數(shù)函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C++ float轉(zhuǎn)std::string 小數(shù)位數(shù)控制問題

    C++ float轉(zhuǎn)std::string 小數(shù)位數(shù)控制問題

    這篇文章主要介紹了C++ float轉(zhuǎn)std::string 小數(shù)位數(shù)控制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論