将for循环转换为递归函数

时间:2013-06-05 05:25:32

标签: python function recursion iteration

任何人都可以帮忙将其转换为递归函数吗?

def max_vel(t):
    vel = 0   
    thr = 10
    c = -0.1
    for i in range(t):
        fric = c * vel
        acc = thr + fric
        vel = vel + acc
        print fric, acc, vel
    print vel
    return vel
print max_vel(154)

2 个答案:

答案 0 :(得分:0)

一种相当简单的方法:

def max_vel(t, vel=[0], thr=10):
    c = -0.1
    if t > 0:
        fric = c * vel[0]
        acc = thr + fric
        vel[0] = vel[0] + acc
        print fric, acc, vel
        max_vel(t - 1, vel, thr)
    return vel[0]

这里你只需递减t,因为这是迭代次数。 c永远不会更改,因此它不会在递归中传递。现在我使用vel作为1个元素的列表,因为在Python列表中是可变的:这允许通过递归调用更新vel内容。

答案 1 :(得分:0)

要解决递归问题,需要以递归方式说明问题。这意味着以类似的方式定义它。

在这种情况下,有变量:时间,加速度和速度。因此,必须使用相同变量的子问题来定义主要问题。我们可以使用两个(非常相似)的问题:

  • 从开始起t秒后的加速度和速度是什么。
  • 如果我们给出了加速度和速度,那将是什么加速度和 t秒后的速度。

有两个(类似的)递归解决方案:

def start_av(t):
  if t == 0: return 0, 0
  acc, vel = start_av(t-1)
  thr = 10
  c = -0.1
  fric = c*vel
  acc = thr + fric
  return (acc, vel + acc)

def given_av(t, acc=0, vel=0):
  if t == 0: return acc, vel
  thr = 10
  c = -0.1
  fric = c*vel
  acc = thr + fric
  return given_av(t-1, acc, vel + acc)    

print start_av(10)
print given_av(10)
相关问题