Python在return语句

时间:2016-02-07 17:19:00

标签: python arrays recursion

我正在学习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 

4 个答案:

答案 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)

在python中

你不能在返回中使用赋值。有人在这里谈到这个: 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没有意义!!