最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)一定具備結(jié)束條件

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

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

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

A柱:起始位置

B柱:目標(biāo)位置

C柱:過度位置

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

2、漢諾塔問題畫圖詳解

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

如果初始狀態(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

下面我們畫圖來詳細(xì)解釋一下初始狀態(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);//當(dāng)起始位置只有一個盤子時,直接將他挪到終止位置
	}
	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;
}

當(dāng)A柱起始位置有三個盤子是與我們分析的結(jié)果是一樣的

總結(jié)

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

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

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

相關(guān)文章

  • C#將Unicode編碼轉(zhuǎn)換為漢字字符串的簡單方法

    C#將Unicode編碼轉(zhuǎn)換為漢字字符串的簡單方法

    下面小編就為大家?guī)硪黄狢#將Unicode編碼轉(zhuǎn)換為漢字字符串的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++之set自定義排序問題

    C++之set自定義排序問題

    這篇文章主要介紹了C++之set自定義排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Qt自定義Widget實現(xiàn)互斥效果詳解

    Qt自定義Widget實現(xiàn)互斥效果詳解

    在使用Qt時,可能會遇到這種問題:多個控件互斥,類似于QRadiButton控件,但又不是單純的QRadioButton控件,互斥的可能是一個窗口,也可能是幾個按鈕,等等多種情況。本文將介紹利用Qt自定義Widget實現(xiàn)的互斥效果,需要的可以參考一下
    2022-01-01
  • C語言詳解判斷相同樹案例分析

    C語言詳解判斷相同樹案例分析

    這篇文章主要介紹了用C語言檢查兩棵樹是否相同,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2022-04-04
  • Python與C++ 遍歷文件夾下的所有圖片實現(xiàn)代碼

    Python與C++ 遍歷文件夾下的所有圖片實現(xiàn)代碼

    這篇文章主要介紹了 Python與C++ 遍歷文件夾下的所有圖片實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++指針數(shù)組、數(shù)組指針、數(shù)組名及二維數(shù)組技巧匯總

    C++指針數(shù)組、數(shù)組指針、數(shù)組名及二維數(shù)組技巧匯總

    這篇文章主要介紹了C++指針數(shù)組、數(shù)組指針、數(shù)組名及二維數(shù)組技巧匯總,對于深入理解C++數(shù)組與指針來說非常重要,需要的朋友可以參考下
    2014-08-08
  • 推箱子游戲C語言實現(xiàn)代碼

    推箱子游戲C語言實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了推箱子游戲C語言實現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C/C++程序設(shè)計的基本概念詳解

    C/C++程序設(shè)計的基本概念詳解

    這篇文章主要介紹了C++程序設(shè)計的基本概念詳解,文中有非常詳細(xì)的C語言使用教程及相關(guān)基礎(chǔ)知識,對正在學(xué)習(xí)c語言的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-09-09
  • C++中測試程序運行時間的幾種方法總結(jié)

    C++中測試程序運行時間的幾種方法總結(jié)

    本文介紹了C++中測量程序運行時間的幾種方法,包括使用GetTickCount()、clock()、Boost庫的timer類以及高精度時控函數(shù)QueryPerformanceFrequency和QueryPerformanceCounter,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • C++中鏈表操作實例分析

    C++中鏈表操作實例分析

    本文給大家分享了個人對于C++中鏈表操作的理解,并對具體實例進(jìn)行了分析,是篇非常不錯的學(xué)習(xí)鏈表操作的文章,希望大家能夠喜歡
    2017-07-07

最新評論

雅江县| 山东| 河间市| 百色市| 成都市| 巫山县| 商水县| 文登市| 锡林浩特市| 象州县| 黎城县| 南安市| 丹棱县| 兴安县| 静宁县| 西贡区| 昌黎县| 延边| 库尔勒市| 左云县| 商都县| 绥江县| 吴桥县| 天门市| 张掖市| 茂名市| 梁河县| 北辰区| 金乡县| 赣榆县| 灵武市| 罗山县| 西峡县| 台安县| 松阳县| 德令哈市| 福建省| 白银市| 辽源市| 兴文县| 陕西省|