![](/img/trans.png)
[英]How to turn a for-loop for turtle graphic shape into a recursive function in Python?
[英]Convert a for-loop to a recursive function
任何人都可以幫助將其轉換為遞歸函數嗎?
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]
在這里,您只需遞減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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.