1. 程式人生 > >【零基礎】Python3學習課後練習題(二十)

【零基礎】Python3學習課後練習題(二十)

本文是跟著魚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