課程
/后端開發
/Python
/初識Python
答案的代碼是不是改變 了move括號里面參數的位置,但是print的一直是a -->c, 而不是不改變move括號里的參數。不太理解推導的過程。
2016-03-04
源自:初識Python 7-5
正在回答
形參和實參的區別 可以自己畫個圖幫助理解題干 三個參數的意思是 從第一個參數通過第二個參數移到第三個參數
可可西里羊 提問者
??????????? 二層漢諾塔遞歸作業的分析?開始我看了答案也沒明白,更不用說編程了,直到我在程序里加了指示語句,并把四層塔改成兩層塔)(簡化),才有了些了解。下面寫出原來的程序以及執行結果: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 --> B1 h2 xA --> C1 h2 yB --> C1 h2 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的遞歸函數就會有頭緒了。??說得不對處請指正。感謝不用限時完成作業,感謝被指派回答問題。
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-03-04
形參和實參的區別 可以自己畫個圖幫助理解題干 三個參數的意思是 從第一個參數通過第二個參數移到第三個參數
2016-03-08
??????????? 二層漢諾塔遞歸作業的分析
?開始我看了答案也沒明白,更不用說編程了,直到我在程序里加了指示語句,
并把四層塔改成兩層塔)(簡化),才有了些了解。下面寫出原來的程序以及執行結果:
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的遞歸函數就會有頭緒了。?
?說得不對處請指正。感謝不用限時完成作業,感謝被指派回答問題。