亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請大神講解一下這個題。

任務

漢諾塔 (http://baike.baidu.com/view/191666.htm) 的移動也可以看做是遞歸函數。

我們對柱子編號為a, b, c,將所有圓盤從a移到c可以描述為:

如果a只有一個圓盤,可以直接移動到c;

如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤,首先需要把 (N-1) 個圓盤移動到 b,然后,將 a的最后一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。

請編寫一個函數,給定輸入 n, a, b, c,打印出移動的步驟:

move(n, a, b, c)

例如,輸入 move(2, 'A', 'B', 'C'),打印出:

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

無法理解這個題目的意思。

正在回答

6 回答

你可以理解成這樣:move(移動個數,起點,轉折點,終點)

0 回復 有任何疑惑可以回復我~

百度了一下原理,大概弄明白了。加入a上面有兩個圓盤,要把a上面的圓盤移到c上,順序會是a—b;a—c,b—c。如果把圓盤數抽象為n的話,我們可以把n看成1和n-1的組成。把n-1看作一個單位的話,這樣,就可以把這個過程抽象為2個圓盤。那么,移動的順序也會是a—b;a—c,b—c。move(n-1,a,c,b)表示的是,將n-1個圓盤移動到b上面去,a表示的是起始點,b表示的是終點,c是轉折點;move(1,a,b,c)表示把最后一個圓盤由a移入c中,同理,a是起始點,c是終點,b是轉折點;最后move(n-1,b,a,c),即把事先移動好的圓盤從b放入c中,此時b是起點,c是終點,a是轉折點。望采納~~

附:http://blog.csdn.net/qugename/article/details/41088367? (當初就是看這個博客的解釋看明白的)

3 回復 有任何疑惑可以回復我~

????????if n==1:

?????? ? ? ?print a,"-->",c ? ?else:


0 回復 有任何疑惑可以回復我~

也是沒看懂,應該是把一張a搬到b,然后a在搬一張放到c,然后再把b的一張搬到c。

0 回復 有任何疑惑可以回復我~

a,b,c是定義到參數,被稱作形參,不具有任何意義,只是一個符號,不分配內存空間,只是告訴編譯器,move函數這里需要4個參數,名字為n,a,b,c.

當你調用move函數的時候,move(4,‘A’,‘B’,‘C’),這里傳入到4個參數被稱作實參,是實際存在的。

當程序執行這一步之后,去轉到 def move(n,a,b,c),開始執行子程序。

然后用實參代替形參。簡單的說,就是給形參創建空間,并且賦值為實參。

即:創建名字為n的變量,n=4,創建名字為a的變量,a=‘A’,創建。。。。

上面說的是子程序的調用和執行,你說無法理解這個題目,我這么跟你說吧,這是一個經典的遞歸程序,不論你學習哪種編程語言還是純粹的算法,講到遞歸必然是要講漢諾塔問題的。

我覺的題目已經解釋的非常清楚了,就是在重復的做一系列的過程:

如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤,首先需要把 (N-1) 個圓盤移動到 b,然后,將 a的最后一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。

我貼一段代碼你理解一下吧,如果理解不了就google,這是最經典的遞歸思想,當然也是比較簡單的。不要認為它有難度。


def move(n, a, b, c): ? ?

????????if n==1:

?????? ? ? ?print a,"-->",c ? ?else:
? ? ? ?move(n-1,a,c,b)
? ? ? ?move(1,a,b,c)
? ? ? ?move(n-1,b,a,c)

move(4, 'A', 'B', 'C')


這里格式有點小問題,是粘貼導致的。。。。

0 回復 有任何疑惑可以回復我~
#1

Looks3708772 提問者

move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) 這三部是這個意思么?首先需要把 (N-1) 個圓盤移動到 b,然后,將 a的最后一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。我不明白為什么字母順序一定要這樣寫,(a,c,b)(a,b,c)(b,a,c)。。。
2016-07-25 回復 有任何疑惑可以回復我~
#2

Looks3708772 提問者

move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) 這三部是這個意思么?首先需要把 (N-1) 個圓盤移動到 b,然后,將 a的最后一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。我不明白為什么字母順序一定要這樣寫,(a,c,b)(a,b,c)(b,a,c)。。
2016-07-25 回復 有任何疑惑可以回復我~
#3

求球 回復 Looks3708772 提問者

回復不能超過300字,白打了好多字。。
2016-07-26 回復 有任何疑惑可以回復我~
#4

求球 回復 Looks3708772 提問者

你如果是在是不明白,可以給我發郵件 [email protected]
2016-07-26 回復 有任何疑惑可以回復我~
#5

求球 回復 Looks3708772 提問者

回復還得打驗證碼,不爽。http://blog.csdn.net/geekwangminli/article/details/7981570 這篇博客講的還行吧,你看看先,雖然廢話有點多。。。
2016-07-26 回復 有任何疑惑可以回復我~
查看2條回復

n代表圓盤數,ABC代表柱子,?move(2, 'A', 'B', 'C')表示,有2個圓盤,A上面的圓盤是按從小到大的的順序放置的,同樣按照從小到大的順序把A柱子上的圓盤移動到C柱子上面

0 回復 有任何疑惑可以回復我~
#1

Looks3708772 提問者

那b是什么鬼
2016-07-25 回復 有任何疑惑可以回復我~
#2

Looks3708772 提問者 回復 繆王大可

move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) 這三部是這個意思么?首先需要把 (N-1) 個圓盤移動到 b,然后,將 a的最后一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。我不明白為什么字母順序一定要這樣寫,(a,c,b)(a,b,c)(b,a,c)。。。
2016-07-25 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758397    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

請大神講解一下這個題。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號