如何递归模拟随机游走?没有循环(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) 

是否有可能使用递归编写?

+0

这是基础案例的问题吗?我没有读过,我很抱歉。 – 2014-09-28 17:10:15

+0

这是你的算法的问题,或者说是缺少数据。您需要多一份数据,指出何时已经访问过某个位置。 – 2014-09-28 17:13:50

+0

@EvanPorter,有什么特别的原因你不想在这里使用循环? – wnnmaw 2014-09-28 17:26:48

您的代码中有几个错误。试试这个:

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)