【发布时间】:2013-06-25 09:04:51
【问题描述】:
所以我在 python 中实现了一个块交换算法。
我遵循的算法是这样的:
初始化 A = arr[0..d-1] 和 B = arr[d..n-1] 1) 执行以下操作,直到 A 的大小等于 B 的大小
a) 如果 A 更短,则将 B 分为 Bl 和 Br,使得 Br 相同 长度为 A。交换 A 和 Br 以将 ABlBr 更改为 BrBlA。现在一个 是在它的最后位置,所以在 B 的片段上重复。
b) 如果 A 更长,将 A 分成 Al 和 Ar,使得 Al 相同 长度为 B 交换 Al 和 B 以将 AlArB 更改为 BArAl。现在乙 是在它的最后位置,所以在 A 的片段上重复。
2) 最后当 A 和 B 大小相等时,块交换它们。
在这个网站上用 C 语言实现了相同的算法 - Array Rotation
我的python代码是
a = [1,2,3,4,5,6,7,8]
x = 2
n = len(a)
def rotate(a,x):
n = len(a)
if x == 0 or x == n:
return a
if x == n -x:
print(a)
for i in range(x):
a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
print(a)
return a
if x < n-x:
print(a)
for i in range(x):
a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
print(a)
rotate(a[:n-x],x)
else:
print(a)
for i in range(n-x):
a[i], a[(i-(n-x) + n) % n] = a[(i-(n-x) + n) % n] , a[i]
print(a)
rotate(a[n-x:], n-x)
rotate(a,x)
print(a)
我在每个阶段都得到了正确的值,但是递归函数调用没有返回预期的结果,我似乎无法理解原因。有人可以解释我的递归有什么问题吗?以及可能的替代方案。
【问题讨论】:
标签: python arrays recursion rotation swap