首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >随机游走问题(Escape Recursion)

随机游走问题(Escape Recursion)
EN

Stack Overflow用户
提问于 2011-05-01 10:07:09
回答 1查看 862关注 0票数 0

作为实践,以及作为我脑海中更复杂、更大项目的前身,我使用Turtle模块创建了一个随机遍历脚本。我意识到有更简单的方法来进行随机漫步,而不必找到邻近的坐标,但据我所知,这对于更大的实现是必要的。

我遇到的问题是,当python发现它已经访问了getnext()函数中的每个相邻单元时,它已经达到了最大的递归深度。我不确定如果发生这种情况,我将如何逃脱这个循环并继续正常运行。

代码语言:javascript
运行
复制
import turtle
import random




class cell(object):
def __init__(self, pos, visited = False):
    self.xCoord = pos[0]
    self.yCoord = pos[1]
    self.visited = visited
    self.neigh = []
    self.neighbors = self.getneighbors()

def getneighbors(self):
    for j in (-1, 0, 1):
        for i in (-1, 0, 1):
            self.neigh.append((self.xCoord+i, self.yCoord+j))



def getnext():
   nextindex = random.randint(0, len(c.neigh)-1)
   nextcoordt = c.neigh[nextindex]
   nextcoord = list(c.neigh[nextindex])
   if nextcoordt in coords:
       getnext()
   else:
      turtle.goto(nextcoord[0], nextcoord[1])



coords = {} 

turtle.setup(width =200, height = 200, startx = 0, starty = 0)
turtle.trace = False

for i in range(1000):
    c = cell(list(turtle.pos()))
    coords[turtle.pos()] = (c)
    getnext()

此外,这实际上是我的第一个真正的OOP应用程序,我想知道这是不是一个使用它的好方法。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-01 10:49:15

如果你的随机游走发现它已经访问了每个相邻的单元,它将永远循环。由于您使用的是递归,因此它很快就会超过最大递归限制。

我确信这可以用OOP方式编写,但问题更多的是在使用递归时,而不是cell类是否有用。例如,我简化了您的代码,使其以线性方式运行。这些更改包括:

  • 消除了(0,0)方向,因为它没有前进。(可选,取决于您的目标,即您是否认为“保持原地不动”是有效的移动)。
  • 使用random.choice()来选择下一步移动的方向。
  • 通过将方向向量添加到当前位置来删除递归,以便计算下一个坐标。一个简单的循环suffices.
  • Doesn't检查下一个位置与最近的位置历史,因为移动到前一个空间是完全有效的随机性。

代码:

代码语言:javascript
运行
复制
import itertools
import random
import turtle

# change step size if you like
STEP = 1
PTS = [-STEP, 0, STEP]
DIRS = [(x, y) for x in PTS for y in PTS if x or y]

turtle.setup(width=400, height=400, startx=0, starty=0)
turtle.trace = False
pos = turtle.pos()

for i in range(1000):
    px, py = turtle.pos()
    # direction of next move
    xd, yd = random.choice(DIRS)
    # set pos to current pos + direction vector
    turtle.goto(px + xd, py + yd)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5845925

复制
相关文章

相似问题

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