![](/img/trans.png)
[英]In terms of function parameter passing, is there any “mutable” type in C++ as there is in python
[英]Is there any way to perform this type of recursion in C++ or python?
假設我有一個名為my_func(a,b,s,t)
的 function。 假設,我希望a
和b
按值傳遞,但我希望s
和t
按引用傳遞。 比如,我想知道一些如何傳入讓我們說(4,5,s',t')
。 function 通過調用my_func(a/2,b/2,s/2,t/2)
執行計算。 問題是,在遞歸的“底部”有一個基本情況,它為s
和t
提供了具體的值。
讓我舉一個小例子:
def e_euclid(a,b,s,t):
if (a == b):
s = 4
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)
else:
return 2*e_euclid(a/2,b/2,(s+b)/2,(t-a)/2)
...
因此,我會將此 function 稱為e_euclid(a,b, something, something)
但隨后我必須為s
和t
提供具體值。 你們能看出我在這里想做什么嗎?
在我返回 (s,t) 的地方進行遞歸會導致我不想執行的艱難計算,所以我想這樣做。
您的代碼似乎已損壞, 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])
Output( 在線試用! ):
3 [47] [-18] 3
我認為您正在嘗試使用該算法的二進制版本,應該以相同的方式可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.