python再帰関数のケース
1433 ワード
1、月給は日によって支給して、初日に1銭をあげて、それから、翌日は前日の2倍で、それでは30日後の給料はいくらですか?
問題解決の考え方:
初日0.01
翌日0.01*2
3日目0.01*2^2
...
30日目0.01*2^29
コードは次のとおりです.
実行結果:
2、サルは毎日前日の半分以上の桃を食べて、10日目に桃が1つ残っています.初日に桃が何個ありますか.
問題解決の考え方:
コードは次のとおりです.
実行結果:
3、ボールは100メートルの高さから自由に落ちて、着地するたびに元の高さの半分に跳ね返った.更に落ちて、それが10回目に着地する時を求めて、共に何メートルを通りますか?10回目のリバウンドはどれくらいですか?
問題解決の考え方:
1回目の着地通過距離:f(1)=100
2回目の着地通過距離:f(1)+100*(1/2)*(2-2)
3回目の着地通過距離:f(2)+100*(1/2)*(3-2)
...
10回目の着地通過距離:f(9)+100*(1/2)*(10-2)
コードは次のとおりです.
実行結果:
問題解決の考え方:
初日0.01
翌日0.01*2
3日目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、サルは毎日前日の半分以上の桃を食べて、10日目に桃が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回目のリバウンドはどれくらいですか?
問題解決の考え方:
1回目の着地通過距離:f(1)=100
2回目の着地通過距離:f(1)+100*(1/2)*(2-2)
3回目の着地通過距離: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