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

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

看不懂答案

答案的代碼是不是改變 了move括號里面參數的位置,但是print的一直是a -->c, 而不是不改變move括號里的參數。不太理解推導的過程。

正在回答

2 回答

形參和實參的區別 可以自己畫個圖幫助理解題干 三個參數的意思是 從第一個參數通過第二個參數移到第三個參數

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

可可西里羊 提問者

非常感謝!
2016-03-04 回復 有任何疑惑可以回復我~

??????????? 二層漢諾塔遞歸作業的分析
?開始我看了答案也沒明白,更不用說編程了,直到我在程序里加了指示語句,
并把四層塔改成兩層塔)(簡化),才有了些了解。下面寫出原來的程序以及執行結果:
def move(n, a, b, c):
??? if n == 1:
??????? print a, '-->', c
??print n, 'h'??????????? #用h指示上一條打印語句的結束
?else:
???? move(n-1, a, c, b)????????? #將n-1個盤移到b柱上
??print n, 'x'??????????? #用x指示上一行函數的結束
??move(1, a, b, c)??????????? #將最后一個盤移到c柱上
??print n, 'y'??????????? #用y指示上一行函數的結束
??move(n-1, b, a, c)????????? #將b柱上的盤移到c柱上?
??print n, 'z'??????????? #用y指示上一行函數的結束
n = int(input(‘請輸入漢諾塔的層數: ’))
move(n, 'A', 'B', 'C')????????????? #調用函數???
?執行結果:
A --> B
1 h
2 x
A --> C
1 h
2 y
B --> C
1 h
2 c
??? 整個程序分為三個部分。第一部分定義函數; 第二部分輸入層數; 第三部分調用函數。
??? 先說函數部分,move函數有四個參數,n是層數,我將把它設為2;a,b,c分別代表第一、二、三
柱, 要注意的是它們是字符類型的變量,賦給它什么字符,它就代表什么字符。在if語句中,
print a, '-->', b語句,應該理解為打印第一個變量到第三個變量。
?再說調用函數的參數,'A','B','C'分別賦給a,b,c三個變量。
??? 下面?來說程序的運行。運行開始時先輸入層數2。
?接著就執行move(2,'A','B','C')函數,n=2的調用開始:
?跳過if n==1的判斷,進入else:中的
第一個函數,層數變量n-1=2-1,'A'賦給a,'B'賦給c,'C'賦給b,即move(1,'A','B','C'),
這時n=2的調用還沒有結束,又進入n =1的調用:
??? 進入if n==1:,條件符合;進入print a, '-->', c語句,因為a變量被賦為‘A’,c變量被
賦為'B',所以打印 A --> B,再打印1 h(因為n=1)。
??? 這時,else中的第一個函數結束,就會打印2 x (n=1的調用結束,n=2的調用還沒結束)。
往下進入第二個函數move(1,a,b,c,),這也是n=1的調用,變成move(1,'A','B','C'),這次c
變量被賦了‘C’值, n=1,符合條件if條件,執行print a,-->,c語句, 打印的是A --> C,再
打印指示語句 1 h。
??? 這時,else中的第二個函數結束,打印下面的指示語句 2 y。進入第三個函數,也是n=1的調用:
只不過'A'賦給了b變量,'B'賦給了a變量,打印a --> c時,實際打印的是B --> C,最后打印兩個
指示語句后,n=2的調用結束。整個程序結束。
?如果再分析n=3,或n=4的遞歸函數就會有頭緒了。?
?說得不對處請指正。感謝不用限時完成作業,感謝被指派回答問題。

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

舉報

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

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

進入課程

看不懂答案

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

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

幫助反饋 APP下載

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

公眾號

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