将此递归算法转换为迭代算法

时间:2014-01-02 11:40:58

标签: algorithm

我正在查看这个stackoverflow问题:Game of 2/9 (Interview at Facebook)

在其中一个答案中指出,通过与递归解决方案进行比较,可以找到这个算法:

def win29(n):
    if n<=9: return True
    n-=1
    while n>=18:
        n = n//18
    return n==1 or 4<=n<=8

我想递归算法就是这个:

 F(i, j) = true; if (2^i * 9^j * 9) >= N
       !(F(i+1, j) && F(i, j+1)); otherwise

将此递归算法转换为上述迭代算法的机制或过程(或比较)是什么?

1 个答案:

答案 0 :(得分:1)

这是我可以解释的算法:

  1. N < 18^k*x and x>8 & x<18:然后玩家2获胜,因为他可以通过使18的力量保持胜利来维持胜利

  2. N < 18*k*x*9 and x>8 & x<18N<18*k*2*x and x>8 & x<18:使用与1.相同的类比,其中玩家1移动2或9,然后使用1获胜。因为他是下一步中的玩家2。简化两个方程式中的余数,我们得到r>=9*8/18>=4 and r<9*18/18<=8 and r>=9*2/18>=1 and r<18*2/18<2,让玩家1获胜

  3. 因此连续除以18,然后检查n>=4 and n<=8 or n==1让玩家1获胜

    如果比较正确我的解释虽然我通过另一种方式来解释但它与递归解决方案相当,其中2^i*9^j*9可以显示为18^k*xF(i+1,j) as 2*18^k*x以及F(i,j+1) as 9*18^k*x