任何人都可以帮助将其转换为递归函数吗?
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)
一个相当简单的方法:
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]
在这里你只是 decrement t
,因为这是迭代次数。c
永远不会改变,所以它不会在递归中传递。现在我将vel
其用作 1 个元素的列表,因为在 Python 中列表是可变的:这允许vel
通过递归调用更新内容。
为了解决递归问题,需要以递归方式陈述该问题。这意味着以自我相似的方式定义它。
在这种情况下,有变量:时间、加速度和速度。因此,必须用具有相同变量的子问题来定义主要问题。我们可以使用 2 个(非常相似的)问题:
有了两个(相似的)递归解决方案:
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)