如何修复python递归函数

时间:2019-08-11 02:35:16

标签: python recursion

我正在尝试编写一个递归函数,该函数返回已交换相邻元素的列表的副本。例如,swapElements([2,3,4,9])将返回[3,2,9,4]。
到目前为止,这是我的代码:

def swapElements(mylist):
    if len(mylist) == 1:
        pass
    if len(mylist) == 2:
        mylist[0], mylist[1] = mylist[1], mylist[0]
    else:
        mylist[0], mylist[1] = mylist[1], mylist[0]
        swapElements(mylist[2:])
    return mylist

当我运行此函数时,它仅返回交换了前两个元素的列表,有人知道为什么此函数不交换除前两个元素之外的任何其他元素吗,我该如何解决?

2 个答案:

答案 0 :(得分:0)

在您的问题中,它表示您希望返回副本。您的函数会原位改变mylist。此外,pass的返回值为None。您可以像这样简化功能-

def swap (a = []):
  if len(a) < 2:
    return a
  else:
    return [ a[1], a[0] ] + swap(a[2:])

print(swap([2, 3, 4, 9]))
# [2, 3, 4, 9]

print(swap([2, 3, 4, 9, 6]))
# [2, 3, 4, 9, 6]

print(swap([1]))
# [1]

print(swap())
# []

答案 1 :(得分:0)

我让递归完成工作,如果是Python 3,则做一些不太面向索引的事情,例如:

def swapPairs(array):
    if len(array) < 2:
        return array

    a, b, *rest = array

    return [b, a, *swapPairs(rest)]