有没有办法在 C++ 或 python 中执行这种类型的递归?
Is there any way to perform this type of recursion in C++ or python?
假设我有一个名为 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
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)
...
因此,我将此函数称为 e_euclid(a,b, something, something)
,但随后我必须为 s
和 t
提供具体值。你们能看出我在这里想做什么吗?
在我 return (s,t) 的地方进行递归会导致我不想执行的艰难计算,所以我想这样做。
您的代码似乎已损坏,a == b
和 s = 4
以及 t = -3
的基本情况 (?) 已经没有意义了。但是请参阅 this C++ implementation 和我的 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] [-18] 3
我认为您正在尝试使用该算法的二进制版本,应该以同样的方式可行。
假设我有一个名为 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
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)
...
因此,我将此函数称为 e_euclid(a,b, something, something)
,但随后我必须为 s
和 t
提供具体值。你们能看出我在这里想做什么吗?
在我 return (s,t) 的地方进行递归会导致我不想执行的艰难计算,所以我想这样做。
您的代码似乎已损坏,a == b
和 s = 4
以及 t = -3
的基本情况 (?) 已经没有意义了。但是请参阅 this C++ implementation 和我的 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] [-18] 3
我认为您正在尝试使用该算法的二进制版本,应该以同样的方式可行。