我需要撰寫一個應用以下操作的遞回函式:
- 如果a = 0 或 b = 0,則回傳[a, b]。否則,轉步驟(2);
- 如果a >= 2b,設定a = a - 2b,并重復步驟(1)。否則,轉步驟(3);
- 如果b >= 2a,設定b = b - 2a,并重復步驟(1)。否則,回傳[a, b]。
我想要實作的一些示例:
- input(6, 19) 回傳 [6, 7]
- input(2, 1) 回傳 [0, 1]
- input(22, 5) 也回傳 [0, 1]
- 輸入 (8796203,7556) 回傳 [1019,1442]
我不能正確地得到第三和第四個例子。問題是,由于函式必須是遞回的,我不能使用 for 回圈。
到目前為止我的代碼:
if a == 0 or b == 0:
return[a, b]
if a >= 2 * b:
a -= 2 * b
if a == 0 or b == 0:
return [a, b]
if b >= 2 * a:
b -= 2 * a
if a == 0 or b == 0:
return [a, b]
return [a, b]
uj5u.com熱心網友回復:
這是您需要的遞回函式:
def f(a, b):
if a == 0 or b == 0: # step 1
return [a, b]
if a >= 2 * b: # step 2
a = a - 2 * b
return f(a, b) # recursive call
if b >= 2 * a: # step 3
b = b - 2 * a
return f(a, b) # recursive call
return [a, b]
f使用您提供的輸入進行測驗:
>>> f(6, 19)
[6, 7]
>>> f(2, 1)
[0, 1]
>>> f(22, 5)
[0, 1]
>>> f(8796203,7556)
[1019, 1442]
uj5u.com熱心網友回復:
你可以使用這個:
def calculate(a,b):
if b==0 or a==0:
print(a,b)
elif a >= 2*b :
a = a - 2*b
calculate(a,b)
elif b >= 2*a:
b = b - 2*a
calculate(a,b)
else:
print(a,b)
# Testing
calculate(8796203,7556)
而這個有回傳功能的:
def calculate(a,b):
if b==0 or a==0:
return [a,b]
elif a >= 2*b :
a = a - 2*b
return calculate(a,b)
elif b >= 2*a:
b = b - 2*a
return calculate(a,b)
else:
return [a,b]
x = calculate(8796203,7556)
print(x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/523496.html
標籤:Python递归
