##约瑟夫环问题 ###问题 有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始, 如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。
###分析 N=8 M=3
0 1 2 3 4 5 6 7
第1次 5 6 X 0 1 2 3 4
第2次 2 3 4 5 X 0 1
3 X 0 1 2 3 4
4 2 3 X 0 1
5 X 0 1 2
6 0 1 X
7 X 1
8 0
每一次去掉退出的人后,重新排编号
第8次剩下0,对应初始编号6
###代码
递归
def recursion(n, m):
if(n == 1):
return 0
return (recursion(n - 1, m) + m)%n
循环
def loop(n, m):
a = 0
for i in range(2, n + 1):
a = (a + m) % i
return a
print recursion(10, 11), loop(10, 11)