如何递归模拟随机游走?没有循环(Python)的
问题描述:
Python的问题如何递归模拟随机游走?没有循环(Python)的
我有1分随机步功能:
def random_step():
""" chooses a random step (-1 or 1) and returns it.
inputs: none! However, make sure to use parens when calling it.
For example: ramdom_step()
"""
return random.choice([-1, 1])
,我需要它调用这个函数我写:
rw_outcome(start, numsteps)
,这需要两个输入:
-
start
,一个表示梦游者起始位置的整数 -
numsteps
,表示随机步骤#从起始位置
应该模拟包括numsteps
随机步骤,其大小是使用调用random_step()
确定的随机游走采取积极的整型,但我一直返回相同的起始位置。
它应该与打印返回的代码示例(“开局”,开始):
>>> rw_outcome(40, 4)
start is 40
start is 41
start is 42
start is 41
start is 42
42
我有什么至今:
def rw_outcome(start, numsteps):
print('start is', start)
if start + (numsteps*random_step()) == 0:
return 0
else:
return rw_outcome(start,numsteps+1)
是否有可能使用递归编写?
答
您的代码中有几个错误。试试这个:
def rw_outcome(start, numsteps):
print('start is', start)
if numsteps == 0:
return 0
else:
return rw_outcome(start+random_step(),numsteps-1)
它应该工作。
+0
谢谢你的工作,我看到我做错了。 – 2014-09-28 17:20:30
+0
我很高兴它帮助。:] – Mistsz1 2014-09-28 17:23:02
答
像这样?
def random_step(nsteps=1):
if nsteps>0:
return random_step(nsteps-1)+random.choice([-1, 1])
else:
return 0
def rw_outcome(start, numsteps):
return start+random_step(numsteps)
这是基础案例的问题吗?我没有读过,我很抱歉。 – 2014-09-28 17:10:15
这是你的算法的问题,或者说是缺少数据。您需要多一份数据,指出何时已经访问过某个位置。 – 2014-09-28 17:13:50
@EvanPorter,有什么特别的原因你不想在这里使用循环? – wnnmaw 2014-09-28 17:26:48