假設我有一個名為my_func(a,b,s,t)的函式。假設,我希望a和b是通過值傳遞的,但我希望s和t是 "通過參考傳遞的"。就像,我想以某種方式傳入我們所說的(4,5,s',t')。該函式通過呼叫my_func(a/2,b/2,s/2,t/2)來執行計算。問題是在遞回的 "底部 "有一個基本情況,它給了s和t具體的值。
def e_euclid(a,b,s,t)。
if(a == b)。
s = 4: if (a == b).
t = -3: t = -3.
return a
if (a%2 == 0 and b%2 == 0) 。
if (s%2 == 0 and t%2 == 0) 。
return 2*e_euclid(a/2, b/2, s/2,t/2)
否則。
回傳2*e_euclid(a/2,b/2, (s b)/2, (t-a)/2)
...
因此,我將以e_euclid(a,b,something,something)的形式來呼叫這個函式,但是我必須為s和t提供具體的值,你們能明白我在這里要做什么嗎?
在我回傳(s,t)的地方進行遞回會導致我不希望進行的艱難的計算,所以我想用這種方式來做。
謝謝!
uj5u.com熱心網友回復:
你的代碼似乎壞了,已經有a == b和s = 4和t = -3的基本情況(?但是請看這個C 實作和我的Python翻譯,使用單元素串列而不是C 的參考:
def gcd(a, b, x=[None], y=[None])。
if b == 0:
x[0] = 1
y[0] = 0
return a
x1, y1 = [None], [None]
d = gcd(b, a % b, x1, y1)
x[0] = y1[0]
y[0] = x1[0] - y1[0] * (a/b)
return d
a, b = 123, 321
x, y = [None], [None]
print(gcd(a, b, x, y), x, y, a*x[0] b*y[0] )
輸出(Try it online!):
3 [47]/span> [-18]/span> 3
我想你是想使用二進制版本的演算法,那應該可以用同樣的方法來做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/330531.html
標籤:
