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

C語(yǔ)言遞歸:漢諾塔問(wèn)題分析

 更新時(shí)間:2023年01月24日 11:58:16   作者:持續(xù)進(jìn)化中  
這篇文章主要介紹了C語(yǔ)言遞歸:漢諾塔問(wèn)題分析的相關(guān)資料,需要的朋友可以參考下

問(wèn)題背景

漢諾塔問(wèn)題源自印度一個(gè)古老的傳說(shuō),印度教的“創(chuàng)造之神”梵天創(chuàng)造世界時(shí)做了 3 根金剛石柱,其中的一根柱子上按照從小到大的順序摞著 64 個(gè)黃金圓盤(pán)。梵天命令一個(gè)叫婆羅門(mén)的門(mén)徒將所有的圓盤(pán)移動(dòng)到另一個(gè)柱子上,移動(dòng)過(guò)程中必須遵守以下規(guī)則:

每次只能移動(dòng)柱子最頂端的一個(gè)圓盤(pán);每個(gè)柱子上,小圓盤(pán)永遠(yuǎn)要位于大圓盤(pán)之上;

游戲體驗(yàn)

點(diǎn)擊開(kāi)始體驗(yàn)游戲:??漢諾塔游戲 (gitee.io)??

遞歸:漢諾塔問(wèn)題_遞歸

漢諾塔移動(dòng)次數(shù)規(guī)律

個(gè)數(shù)

移動(dòng)次數(shù)f(n)

規(guī)律

1

1

2^1-1

2

3

2^2-1

3

7

2^3-164-1

4

15

2

...

...

...

n

2^n-1

2^n-1

由上述分析可以得到f(n)與f(n-1)的關(guān)系:  

所以:f(n)=2^n-1 ; f(n-1)=2^(n-1)-1

 f(n)=2^n-1=2^1*(2^(n-1)-1)+1=2*f(n-1)+1

移動(dòng)過(guò)程的深層解讀

漢諾塔問(wèn)題的三步過(guò)程歸納

(我們是把n-1個(gè)圓盤(pán)看成一個(gè)整體去分析的)

 一.把n-1個(gè)圓盤(pán)從A(經(jīng)過(guò)C)移到B

遞歸:漢諾塔問(wèn)題_代碼實(shí)現(xiàn)_02

 二. 把A上第n個(gè)圓盤(pán)移到C

遞歸:漢諾塔問(wèn)題_漢諾塔_03

 三: 把B上的(n-1)個(gè)圓盤(pán)(經(jīng)過(guò)A)移到C

遞歸:漢諾塔問(wèn)題_算法_04

重點(diǎn)?。。?!

中間的一步是把最大的一個(gè)盤(pán)子由A移到C上去;A->C
(1)中間一步之前可以看成把A上n-1個(gè)盤(pán)子通過(guò)借助C塔移到了B上,A->B
(2)中間一步之后可以看成把B上n-1個(gè)盤(pán)子通過(guò)借助A塔移到了C上;B->C

圖解:

階數(shù)

步驟

1

A->C

2

A->B,A->C,B->C

3

A->C,A->B,C->B,A->C,B->A,B->C,A->C

4

A->B,A->C,B->C,A->B,C->A,C->B,A->B,A->C,B->C,B->A,C->A,B->C,A->B,A->C,B->C

...

...

奇數(shù)

第一步A->C

偶數(shù)

第一步A->B

發(fā)現(xiàn):

奇數(shù)個(gè)圓盤(pán)第一步永遠(yuǎn)為A–>C

偶數(shù)個(gè)圓盤(pán)第一步永遠(yuǎn)為A–>B

代碼實(shí)現(xiàn)1

僅打印移動(dòng)次數(shù)

#include<stdio.h>
int Tower(int num)
{
if(num==1)
return 1;
else
return 2*Tower(num-1)+1;
}
int main()
{
int num=0;
int ret=0;
printf("請(qǐng)輸入層數(shù):");
scanf("%d",&num);
ret=Tower(num);
printf("需要%d次完成\n",ret);
return 0;
}

關(guān)鍵步驟

if(num==1)
return 1;
else
return 2*Tower(num-1)+1;

遞歸:漢諾塔問(wèn)題_遞歸_05

代碼實(shí)現(xiàn)2

打印移動(dòng)的具體過(guò)程

#include <stdio.h>
void Move(char A,char C)
{
printf("%c --> %c\n",A,C);
}
void tower(int a,char A,char B,char C)//漢諾塔函數(shù)實(shí)施主體,A為初始柱,B為經(jīng)由柱,C為目的柱
{
if (a==1)
{
Move(A,C);
}
else
{
tower(a-1,A,C,B);//把n-1個(gè)圓盤(pán)從A(經(jīng)過(guò)C)移到B
Move(A,C);
tower(a-1,B,A,C);//把B桿上的(n-1)個(gè)圓盤(pán)(經(jīng)過(guò)A)移到C
}
}
int Tower(int num)
{
if (num==1)
return 1;
else
return 2*Tower(num-1)+1;
}
int main()
{
int a = 0;
int Num=0;
printf("請(qǐng)輸入層數(shù):");
scanf("%d",&a);
Num = Tower(a);
printf("%d層需要移動(dòng)%d步\n", a, Num);
tower(a, 'A', 'B', 'C');//進(jìn)入遞歸
return 0;
}

遞歸:漢諾塔問(wèn)題_#include_06

補(bǔ)充

進(jìn)階題:移動(dòng)盤(pán)子的過(guò)程中只能夠相鄰柱間移動(dòng),結(jié)論:移動(dòng)次數(shù):f(n)=3^n-1

到此這篇關(guān)于C語(yǔ)言遞歸:漢諾塔問(wèn)題分析的文章就介紹到這了,更多相關(guān)遞歸:漢諾塔問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器程序

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++中using的三種用法舉例詳解

    C++中using的三種用法舉例詳解

    最近在使用中,發(fā)現(xiàn)了一種以前沒(méi)學(xué)過(guò)的using用法,于是在這里,將using的幾種用法總結(jié)一下,下面這篇文章主要給大家介紹了關(guān)于C++中using的三種用法,需要的朋友可以參考下
    2023-02-02
  • 詳解C++?STL模擬實(shí)現(xiàn)list

    詳解C++?STL模擬實(shí)現(xiàn)list

    這篇文章主要為大家詳細(xì)介紹了C++如何模擬實(shí)現(xiàn)STL容器list,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下
    2023-01-01
  • C語(yǔ)言數(shù)組指針的小例子

    C語(yǔ)言數(shù)組指針的小例子

    這篇文章介紹了,用c語(yǔ)言實(shí)現(xiàn)的一個(gè)數(shù)組指針的小例子,有需要的朋友可以參考一下
    2013-07-07
  • 詳談signed 關(guān)鍵字

    詳談signed 關(guān)鍵字

    c++中關(guān)鍵字有幾十個(gè),其中類(lèi)型修飾關(guān)鍵字有l(wèi)ong, short, singed, unsigned。今天我們就來(lái)談一下經(jīng)常被大家忽視的signed關(guān)鍵字
    2015-01-01
  • Qt讀寫(xiě)XML文件的方法詳解(含源碼+注釋)

    Qt讀寫(xiě)XML文件的方法詳解(含源碼+注釋)

    XML文件可以用來(lái)存儲(chǔ)項(xiàng)目中的數(shù)據(jù),它相當(dāng)于一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Qt讀寫(xiě)XML文件(含源碼+注釋)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語(yǔ)言編程數(shù)據(jù)結(jié)構(gòu)的棧和隊(duì)列

    C語(yǔ)言編程數(shù)據(jù)結(jié)構(gòu)的棧和隊(duì)列

    本篇文章是C語(yǔ)言編程篇,主要為大家介紹C語(yǔ)言編程中的數(shù)據(jù)結(jié)構(gòu),詳細(xì)的講解了數(shù)據(jù)結(jié)構(gòu)的棧和隊(duì)列有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • C++ 如何將string轉(zhuǎn)換成全小寫(xiě)

    C++ 如何將string轉(zhuǎn)換成全小寫(xiě)

    這篇文章主要介紹了C++ 如何將string轉(zhuǎn)換成全小寫(xiě)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-11-11
  • C語(yǔ)言指針超詳細(xì)講解下篇

    C語(yǔ)言指針超詳細(xì)講解下篇

    指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得?C?語(yǔ)言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過(guò)指針可以更便捷地操作數(shù)組。在一定意義上可以說(shuō),指針是?C?語(yǔ)言的精髓
    2022-04-04

最新評(píng)論

娱乐| 闵行区| 通州市| 成安县| 元谋县| 衡阳市| 读书| 塘沽区| 城固县| 木兰县| 海阳市| 招远市| 吉隆县| 渭南市| 南丹县| 柳江县| 怀宁县| 绥滨县| 海兴县| 手游| 兴海县| 福贡县| 荥经县| 常州市| 甘泉县| 马鞍山市| 大余县| 车致| 马关县| 永丰县| 贵州省| 安福县| 宜阳县| 安龙县| 沙田区| 淅川县| 阜南县| 福鼎市| 九江市| 张家港市| 天长市|