1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| def joseph_math(n,m):
if n == 1:
return 0 # why
else:
# 递归做法只需要知道两个part:
# Part 1.
# [1, 2, 3, 4, 5] 能存活 [4]
# Part 2.
# [1, 2, 3, 4, 5, 6] 第一次让 [5] 出去了
# --------------------------------------
# 那么 出去之后 圈变成了 [1, 2, 3, 4, 6]
# 这时,从 [6] 开始数,故可以看做 [6, 1, 2, 3, 4]
# 又因 [1, 2, 3, 4, 5] 能存活 [4]
# 所以 [6, 1, 2, 3, 4] 能存活 [3]
joseph_next = joseph_math(n-1,m)
survive = (joseph_next + m) % n
return survive
|