【问题标题】:Recursion Error when calling more than one function调用多个函数时出现递归错误
【发布时间】:2021-03-13 11:05:57
【问题描述】:

我有 2 个单独的函数,用于打印数组排序算法(插入排序和快速排序)的比较计数。在这些函数中,我使用 4 个不同的列表调用排序算法 4 次。

Alg. / Comparison count:        l=10    l=100   l=1000  l=10000
Insertion-sort:                 18      198     1998    19998

Alg. / Comparison count:        l=10    l=100   l=1000  l=10000
Quick-sort:                     41      797     13392   214916

问题是我只能调用其中一个函数,如果我同时调用这两个函数,我会在快速排序函数上遇到递归错误

RecursionError: maximum recursion depth exceeded in comparison

所以这个

make_arrays()
print("Alg. / Comparison count:\tl=10\tl=100\tl=1000\tl=10000")
print_comp_insert()

还有这个

make_arrays()
print("Alg. / Comparison count:\tl=10\tl=100\tl=1000\tl=10000")
print_comp_quick()

工作正常,但是这个

make_arrays()
print("Alg. / Comparison count:\tl=10\tl=100\tl=1000\tl=10000")
print_comp_insert()
print_comp_quick()

导致错误。

我真的不明白这里发生了什么。

【问题讨论】:

  • 如何初始化数组?快速排序和插入排序是否在洗牌数组的两个不同副本上运行?如果您使用插入排序对数组进行排序,那么它就会被排序。如果您随后在同一个数组上调用快速排序,则您正在尝试对已排序的数组进行排序。这应该可以正常工作,尽管众所周知,快速排序在排序数组上的性能比在无序数组上更差。

标签: python arrays list sorting recursion


【解决方案1】:

递归调用的次数有上限。您可以通过以下方式扩展限制:

import sys
sys.setrecursionlimit(<put integer here>)

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 2016-11-14
    • 2020-03-22
    相关资源
    最近更新 更多