最新国产好看的视频,伊人天堂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柱:目標位置

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柱起始位置有三個盤子是與我們分析的結(jié)果是一樣的

總結(jié)

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

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

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

相關文章

  • 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ù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2022-04-04
  • Python與C++ 遍歷文件夾下的所有圖片實現(xiàn)代碼

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

    這篇文章主要介紹了 Python與C++ 遍歷文件夾下的所有圖片實現(xià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)代碼

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

    C/C++程序設計的基本概念詳解

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

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

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

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

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

最新評論

太湖县| 葫芦岛市| 渝北区| 渭南市| 沭阳县| 浦江县| 鄄城县| 佛冈县| 墨玉县| 渑池县| 长宁县| 博兴县| 随州市| 清镇市| 武冈市| 祁阳县| 永春县| 温宿县| 万盛区| 奉贤区| 新营市| 类乌齐县| 周至县| 鲁山县| 津市市| 中超| 曲麻莱县| 北京市| 文昌市| 大渡口区| 曲周县| 四会市| 伊金霍洛旗| 陆良县| 天镇县| 广丰县| 云龙县| 连江县| 阿拉尔市| 仙桃市| 龙陵县|