簡體   English   中英

有沒有辦法在C++或python中執行這種類型的遞歸?

[英]Is there any way to perform this type of recursion in C++ or python?

假設我有一個名為my_func(a,b,s,t)的 function。 假設,我希望ab按值傳遞,但我希望st按引用傳遞。 比如,我想知道一些如何傳入讓我們說(4,5,s',t') function 通過調用my_func(a/2,b/2,s/2,t/2)執行計算。 問題是,在遞歸的“底部”有一個基本情況,它為st提供了具體的值。

讓我舉一個小例子:

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)但隨后我必須為st提供具體值。 你們能看出我在這里想做什么嗎?

在我返回 (s,t) 的地方進行遞歸會導致我不想執行的艱難計算,所以我想這樣做。

您的代碼似乎已損壞, a == bs = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM