【零基礎】Python3學習課後練習題(二十)
阿新 • • 發佈:2018-12-13
本文是跟著魚C論壇小甲魚零基礎學習Python3的視訊學習的,課後題也是跟隨每一課所附屬的題目來做的,根據自己的理解和標準答案記錄的筆記。
第二十二課
測試題:
0.遞迴在程式設計上的形式是如何表現的呢?
答:表現為在函式體內呼叫自身來實現遞迴。
1.遞迴必須滿足哪兩個基本條件?
答:有來有回,即為1.能夠呼叫自身並且2.有停止條件(設定了正確的返回值)。(不能無限重複迴圈導致有去無回)
2.思考一下,按照遞迴的特性,在程式設計中有沒有不得不使用遞迴的情況?
答:例如漢諾塔,目錄索引(因為你不知道目錄裡是否還有目錄),樹結構的定義等。
3.用遞迴去計算階乘問題或斐波那契數列是很糟糕的演算法,你知道為什麼嗎?
答:遞迴的實現是函式自身呼叫自己進行的,每次函式的呼叫都需要進行壓棧、彈棧、儲存和恢復暫存器的棧,這是非常消耗時間和空間的。另外,如果遞迴一旦忘記了返回,或者錯誤的設定了返回條件,那麼執行這樣的遞迴程式碼就會變成一個無底洞:只進不出。
4.請聊一聊遞迴的優缺點(無需官方陳詞,想到什麼寫什麼就可以)
答:優點是在一定條件下能夠更方便得出想要的結果(將大規模的問題化成小規模的問題進行解決),並且可以使程式碼更加簡潔;缺點是遞迴的過程將會佔用大量的系統資源來進行,並且如果沒有設定好返回條件就會變成一個無限迴圈的無底洞,使得程式整體崩潰掉。
5.拿手機拍一張“遞迴自拍照片”
答:需要兩面鏡子(可以考慮理髮店)。【一面鏡子返回另一面鏡子反射的影像,互相重複。】
動動手:
0.使用遞迴編寫一個power()函式內建函式pow(),即power(x,y)為計算並返回x的y次冪的值。
答:
def power(x,y):
if y == 0:
return 1
else:
return x * power(x,y-1)
1.使用遞迴編寫一個函式,利用歐幾里得演算法求最大公約數,例如gcd(x,y)返回值為引數x和引數y的最大公約數。
答:
def gcd(x, y): if y: return gcd(y, x%y) else: return x