Python中的递归调用在调试中显示非空列表,但在传递给函数时变为'None'类型

问题描述 投票:0回答:1

一个菜鸟问题:我正在为python中的列表实现合并排序。但是,我在执行的最后一步之一一直遇到问题,我将3个列表传递给一个函数,其中两个列表显示为“ None”类型,即使它们在调试器中显示为预期值。

老实说,我需要深入研究递归(调试器非常适合我,我刚刚学到了),因为这对于我作为学生来说是一个绊脚石。但是,由于作业要在午夜进行(这是大问题集中的一部分),所以我没有时间去深入研究今晚的实验,尽管我会在不久的将来进行实验。

这是我的代码:

def swap(_a, _b):
    if _a <= _b:
        return (_a, _b)
    else:
        return (_b, _a)


def merge(*args):
    print("DEBUG: merge() reachable")
    B, C, A = args[0], args[1], args[2]
    i, j, k = 0, 0, 0

    while i < len(B) and j < len(C):
        if B[i] <= C[j]:
            A[k] = B[i];
            i += 1
        else:
            A[k] = C[j];
            j += 1
        k += 1
    if i == len(B):
        A[k:] = C[j:]
    else:
        A[k:] = B[i:]

    #print("A is ", A)
    return(A)

def merge_sort(A):
    if len(A) <= 2:
        return (swap(A[0], A[1]))
    else:
        ln = len(A) // 2
        B, C = A[:ln], A[ln:]
        merge(merge_sort(B), merge_sort(C), A)

def main():
    # merge([5, 7, 9, 11], [2, 4, 5, 7], [0 for i in range(8)])
    merge_sort([3, 5, 7, 9, 8, 6, 4, 2])


if __name__ == "__main__":
    main()

以下是代码段,调试和我得到的错误消息:https://ibb.co/w76tsJvhttps://ibb.co/92rQwNMhttps://ibb.co/qFKfC8p

这里是代表:https://repl.it/repls/WholeRecentTheory

python python-3.x debugging recursion pycharm
1个回答
0
投票

功能

© www.soinside.com 2019 - 2024. All rights reserved.