実用:Python 3サルが桃を盗む問題を解決する(1-10日の中でそれぞれ何粒の桃が食べることができます)


サルは1日目に天宮のいくつかの桃を盗んで、すぐに半分食べて、まだ中毒にならないで、また1つ多く食べて、翌朝また残りの桃を半分食べて、また中毒にならないで1つ多く食べて、それから毎朝すべて前日の残りの半分の1つを食べました.10日目の朝食べたい时になって、やっと1つの桃しか残っていないことを発見して、この幸せなサルの前の1-9日の中でそれぞれどれだけの桃が食べることができますか?ケース1:
days = 10
num = 1
loops = days -1
for day in range(loops,0,-1):
    num = 2*(num+1)
    print('day0{}:{}'.format(day,num))

実行結果:
day09:4
day08:10
day07:22
day06:46
day05:94
day04:190
day03:382
day02:766
day01:1534

ケース2:(関数再帰)
def fn(day=10,peach=1):
    print(day,peach)
    if day == 1:
        return peach
    peach = (peach+1) * 2
    return fn(day-1,peach)

fn(10,1) 

実行結果:
10 1
9 4
8 10
7 22
6 46
5 94
4 190
3 382
2 766
1 1534
Out[220]:
1534

ケース3:(再帰的逆思考)
def fn(day=1,peach=1):
    print(day,peach)
    if day == 10:
        return peach
    peach = (peach+1) * 2
    return fn(day+1,peach)

fn(1,1) 

実行結果:
1 1
2 4
3 10
4 22
5 46
6 94
7 190
8 382
9 766
10 1534
Out[2]:
1534