約瑟夫環出圈問題三種求解方法
阿新 • • 發佈:2019-02-12
<pre name="code" class="python">#coding=utf-8 # 遞迴直接求出 def fun_recursion(m,k): """ f[1]=0; f[i]=(f[i-1]+k)%i = (f[i-1] +m%i) % i = (f[i-1] + m) % i ; (i>1) :param m: 長度 :param k: 第k數出環 :return: """ if m == 1: return 0 else: return (fun_recursion(m-1, k) +k) % m # 遞迴求出出圈佇列 def fun(m, k, i): """ 當i=1時,f(m,k,i) = (m+k-1)%m 當i!=1時,f(m,k,i)= ( f(m-1,k,i-1)+k )%m :param m: 長度 :param k: 第k數出環 :param i: :return: """ if(i==1): return (m+k-1)%m else: return (fun(m-1, k, i-1)+k)%m # for i in range(1,11): # print("第%d次出環:%d" % (i,fun(10,3,i))) # 遍歷求出結果 def func2(m, k): """ :param m: :param k: :return: """ s = 0 for i in range(2, m+1): s = (s + k) % i print "the winner is %d" % s