首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将此递归算法转换为迭代算法

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

Stack Overflow用户
提问于 2014-01-02 11:40:58
回答 1查看 212关注 0票数 1

我在看这个堆叠溢出问题:Game of 2/9 (Interview at Facebook)

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

代码语言:javascript
复制
def win29(n):
    if n<=9: return True
    n-=1
    while n>=18:
        n = n//18
    return n==1 or 4<=n<=8

我想递归算法应该是这样的:

代码语言:javascript
复制
 F(i, j) = true; if (2^i * 9^j * 9) >= N
       !(F(i+1, j) && F(i, j+1)); otherwise

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-02 17:18:19

以下是我可以解释的算法:

  1. N < 18^k*x and x>8 & x<18:然后玩家2胜,因为他可以通过使出18的力量直到x,来迫使一场胜利。
  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,使第一名玩家获胜

因此,先后除以18,然后检查n>=4 and n<=8 or n==1,以求第一名球员获胜。

如果恰当地比较我的解释,尽管我是用另一种方式来解释的,但它可以与递归解决方案相比较,在递归解决方案中,2^i*9^j*9可以可视化为18^k*xF(i+1,j) as 2*18^k*xF(i,j+1) as 9*18^k*x

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20882140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档