python遞歸函數案例

1、月工資按天發放,第一天給你一分錢,然後,後一天是前一天的 2 倍,那麼30天后工資爲多少?

解題思路:

第一天 0.01

第二天 0.01 * 2

第三天 0.01 * 2^2

...

第30天 0.01 * 2^29

代碼如下:

def money(n):
    if n <= 1:
        return 0.01
    else:
        return money(n-1)+0.01*2**(n-1)
print(money(30))

運行結果:

10737418.23

2、猴子每天喫比前一天的一半還多1個桃,第十天的時候剩一個桃子,問你第一天有多少個桃子?

解題思路:

第1天:num(1)=(num(2)+1)*2
....
第8天:num(8) = (num(9)+1)*2
第9天:num(9) = (1+1)*2
第10天:1

代碼如下:

def num(d):
    if d >= 10:
        return 1
    else:
        return (num(d+1)+1)*2
print(num(1))

運行結果:

1534

3、一球從100米高度自由落下,每次落地後反跳回原高度的一半; 再落下,求它在 第10次落地時,共經過多少米?第10次反彈多高?

解題思路:

第一次落地經過的距離:f(1) = 100

第二次落地經過的距離:f(1)+100*(1/2)**(2-2)

第三次落地經過的距離:f(2)+100*(1/2)**(3-2)

...

第10次落地經過的距離:f(9)+100*(1/2)**(10-2)

代碼如下:

def height(n):
    # 經過的高度
    if n == 1:
        return 100
    else:
        return height(n-1)+100*((1/2)**(n-2))
def h1(n):
    # 反彈的高度
    if n == 1:
        return 50
    else:
        return h1(n-1)/2

print('第10次落地一共經過',height(10))
print('第10次反彈的高度爲',h1(10))

運行結果:

第10次落地一共經過 299.609375
第10次反彈的高度爲 0.09765625

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章