日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)

發(fā)布時間:2024/4/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題概述:古代有一個梵塔,塔內(nèi)有3個座A,B,C。開始時A座上有64個盤子,盤子大小不等,大的在下,小的在上,有一個老和尚想把64個盤子從A座移動到C座,但是規(guī)定每次只允許移動一個盤,且在移動過程中在3個座上都始終保持大盤在下,小盤在上。在移動的過程中可以利用B座。(寫出移動的步驟)。

問題分析:在這個問題中,我們先來看如果盤子總量n=3時的情況,因?yàn)樽罱K要將盤子移動到C中,所以最終情況一定是最大的第3個盤子在C上,然后再將前兩個在B上的盤子移動到C上,如何將前兩個盤子移動到B上呢?就是要將此時最大的第二個盤子移動到B上,然后將第一個盤子從A移動到B上,實(shí)現(xiàn)了兩層函數(shù)的遞歸。總結(jié):問題分為三步:1,將最大的盤子前面的n-1個移動到B上,將最大的盤子移動到C上,然后將B上的n-1個移動到C上。這三步中的第一步操作步驟為:將n-2個盤子移動到C上,將最大的盤子移動到B上,然后將第n-2個盤子移動到B上,第三步的操作步驟為:將n-2個盤子移動到A上,將第n-2個盤子移動到C上,再將前面n-2個盤子移動到C上。這三步中第一步操作步驟為:將n-3個盤子移動到B上,將最大的盤子移動到C上,然后將第n-3個盤子移動到C上,以此類推。在步驟中涉及參數(shù)的改變和函數(shù)的遞歸問題。以4個盤子為例做出流程圖如下:

問題代碼:

#include

void Hanoi( int n, char a, char b, char c);//漢諾塔函數(shù)聲明

void Move( int n, char a, char b);//輸出操作步驟函數(shù)的函數(shù)聲明

int count;

int main()

{

int n=8;

printf ( "漢諾塔的層數(shù):\n" );

scanf ( " %d" ,&n);

Hanoi(n, 'A' , 'B' , 'C' );

return 0;

}

void Hanoi( int n, char a, char b, char c)

{

if (n == 1)

{

Move(a, c);

}

else

{

Hanoi(n - 1, a, c, b);//因?yàn)樽罱K要將所有盤子移動到C上,所以將B,C進(jìn)行形式互換//

Move(n, a, c);

Hanoi(n - 1, b, a, c);//和第一步同理//

}

}

void Move( char a, char b)

{

count++;

printf ( "第%d次移動 Move: Move from %c to %c !\n" ,count,a,b);

}

總結(jié)

以上是生活随笔為你收集整理的c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。