我正在学习Python,我想重写这个C代码。
int rec(int n, int *a , int *b) {
return n == 1 ? *a = *b : rec(n / 2, b, a) + rec((n + 1) / 2, a + n / 2, b + n / 2);
}
int main(void) {
int a[] = { 5, 9, 9, 6, 4, 0 };
int b[] = { 1, 7, 2, 9, 2, 0 };
printf("%d %d", rec(5, a, b), rec(6, b, a));
return 0;
}
到Python:
def rec(n, a, b):
if n == 1:
a=b
return a
else:
return rec(n / 2, b, a) + rec((n + 1) / 2, a + n / 2, b + n / 2)
a = [5, 9, 9, 6, 4, 0];
b = [1, 7, 2, 9, 2, 0];
print(rec(5, a, b))
但它总是在a = b
语句中返回语法错误。我做错了什么?
编辑:现在,当我修改代码时,它会抛出:
File "main.py", line 13, in <module>
print(rec(5,a,b))
File "main.py", line 8, in rec
return rec(n/2,b,a) + rec((n+1)/2,a+n/2,b+n/2)
File "main.py", line 8, in rec
return rec(n/2,b,a) + rec((n+1)/2,a+n/2,b+n/2)
TypeError: can only concatenate list (not "int") to list
答案 0 :(得分:1)
如果您想模仿指针,可以添加另一个变量i
来计算数组中的位置。然后,您还可以更改阵列/列表的内容。
def rec(n, a, b, i):
if n == 1:
a[i] = b[i]
return b[i]
else:
return rec(n // 2, b, a, i) + rec((n + 1) // 2, a, b, i + n // 2)
a = [5, 9, 9, 6, 4, 0]
b = [1, 7, 2, 9, 2, 0]
print(rec(5, a, b, 0))
>>> 27
答案 1 :(得分:0)
你不能在返回中使用赋值。有人在这里谈到这个: How to assign a variable in IF, and then return it. (Python) 所以,就这样做:
a = b
return a
答案 2 :(得分:0)
如果你想要一个布尔答案,那么它是a == b
,否则
def rec(n, a, b):
if n == 1:
a=b
return a
答案 3 :(得分:0)
它给出了错误,因为当你做其他部分时:
else : return rec(n / 2, b, a) + rec((n + 1) / 2, a + n / 2, b + n / 2)
注意在else部分中第二次调用rec,注意参数,尤其是第二个和第三个参数。你实际上正在添加或者&#39; +&#39;在这种情况下,python认为你连接为a和b是列表,这是无效的,因为n是一个整数。所以n / 2返回一个整数,a和b是列表, a + n / 2或b + n / 2没有意义!!