python - 保存递归函数的多个值

标签 python recursion

我正在编写一个快速排序函数并使用递归来“分而治之”。我试图记录函数调用自身的次数。但是,我显然在递归概念上遇到了麻烦,因为我无法保存第二个值来保持计数。我试图将 input_stringloops 格式化为 tupledictionary 但我相信我有一个根本性的误解我应该怎么做。如何成功将 2 个值传递给我的递归函数?

def quickSort(input_string, loops):
    string_list = list(input_string)
    less = []
    equal = []
    greater = []

    loops = list(loops)
    loops.append(1)
    if len(string_list) > 1:
        split_val = string_list[0]
        for i in string_list:
            if i < split_val:
                less.append(i)
            elif i == split_val:
                equal.append(i)
            else:
                greater.append(i)
        out = (quickSort(less, loops) + equal + quickSort(greater, loops)), loops
        return out

    else:
        return string_list

我正在使用这里定义的快速排序函数:https://stackoverflow.com/a/18262384/5500488

最佳答案

您可以跟踪函数在每次递归调用中调用自身的次数,将它们相加并添加 2(因为函数在非终止条件下调用自身两次),并且在输入长度为 1 的终止条件,您应该返回 0 作为函数调用自身的次数:

def quickSort(input_string):
    string_list = list(input_string)
    less = []
    equal = []
    greater = []

    if len(string_list) > 1:
        split_val = string_list[0]
        for i in string_list:
            if i < split_val:
                less.append(i)
            elif i == split_val:
                equal.append(i)
            else:
                greater.append(i)
        sorted_less, count_less = quickSort(less)
        sorted_greater, count_greater = quickSort(greater)
        return sorted_less + equal + sorted_greater, count_less + count_greater + 2

    else:
        return string_list, 0

这样 quickSort('gehdcabf') 返回:

(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], 10)

关于python - 保存递归函数的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193024/

相关文章:

将输入作为字符串值进行插入排序的 Python 代码

python - 如何使用 nltk 去除 ptb 解析树中的 -NONE- 和 *T*-i?

algorithm - 具有最大和加约束的最长递增子序列 - 可以跳过允许的元素数量

python - 最大递归深度超出 getter Django

c - 在C中实例化临时静态列表头指针

python scrapy - 输出csv文件为空

python - 使用 BFS 查找最长路径

python - 用点替换逗号并保存更改,对我来说效果不好吗?

python - 如何使用递归计算整数的长度

c - 递归添加目录大小的先前值