第023、024講:遞歸:這幫小兔崽子、漢諾塔 | 課后測試題及答案


0. 使用遞歸編寫一個十進制轉換為二進制的函數(要求采用“取2取余”的方式,結果與調用bin()一樣返回字符串形式)。

  me:

def gcd(x):
    if x <= 1:
        return str(x)
    else:
        return  gcd(x//2) + str(x%2) 
print(gcd(12))

  參考答案:

def Dec2Bin(dec):
    result = ''
    
    if dec:
        result = Dec2Bin(dec//2)
        return result + str(dec%2)
    else:
        return result

print(Dec2Bin(62))

 

1. 寫一個函數get_digits(n),將參數n分解出每個位的數字並按順序存放到列表中。舉例:get_digits(12345) ==> [1, 2, 3, 4, 5]

  me:

def get_digits(n):
    if len(n) == 1:
        return [n[len(n)-1]]
    else:
        return  get_digits(n[:len(n)-1]) + [n[len(n)-1]]

n=str(input("請輸入一個數字:"))
print(get_digits(n))

  參考答案:解題思路:利用除以10取余數的方式,每次調用get_digits(n//10),並將余數存放到列表中即可。要注意的是結束條件設置正確。

  

result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)

 

2. 還記得求回文字符串那道題嗎?現在讓你使用遞歸的方式來求解,親還能驕傲的說我可以嗎?

  me:

def get_hui(n):
    if len(n) == 1:
        return [True]
    elif len(n) == 2:
        return [n[1] == n[0]]
    else:
        return  get_hui(n[1:len(n)-1]) + [n[len(n)-1] == n[0]]


n= str(input("請輸入一句話:"))
if len(n) == 1 :
    print("不是回文聯")
else:
    if False in get_hui(n):
        print("不是回文聯")
    else:
        print("是回文聯")

  參考答案:有好多種方法,不過綜合效率來說,小甲魚的實現方式比較朴素,利用遞歸每次索引前后兩個字符進行對比,當start > end的時候,也正是首尾下標“碰面”的時候,即作為結束遞歸的條件。

  

def is_palindrome(n, start, end):
        if start > end:
                return 1     
        else:
                return is_palindrome(n, start+1, end-1) if n[start] == n[end] else 0
        
string = input('請輸入一串字符串:')
length = len(string)-1

if is_palindrome(string, 0, length):
        print('"%s"是回文字符串!' % string)
else:
        print('"%s"不是回文字符串!' % string)

 

3. 使用遞歸編程求解以下問題:

有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?

  me:

def get_da(n):
    if n == 1:
        return 10 
    else:
        return get_da(n-1) + 2

print(get_da(5))

  參考答案:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道第四人的歲數,依次類推,推到第一人(10歲),再往回推。

def age(n):
    if n == 1:
        return 10
    else:
        return age(n-1) + 2
        
print('哈哈,我知道了,第五個人的年齡是 %d 歲,啵啵脆!' % age(5))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM