递归累积或如何计算Python中的递归调用数?

时间:2018-12-23 14:32:16

标签: python algorithm recursion static

我已经阅读了很多Python手册,但无法弄清楚这一点。

函数中的两个局部变量会自行调用,而其中只有一个局部变量表现为“静态”。

这是代码段:

def sort_bubble(local_itera, difficulty):   
    #local_itera = itera[:]
    sorted_count = 0
    nrecursions = 0

    for i in range(difficulty - 1):
        val1 = local_itera[i]
        val2 = local_itera[i+1]

        if local_itera[i] == min(val1, val2):
            sorted_count += 1
            continue # skip sorted pairs
        else: # swap
            local_itera[i] = min(val1, val2)
            local_itera[i+1] = max(val1, val2)

    if not sorted_count == difficulty - 1: # recurse if not sorted
        nrecursions += 1
        sort_bubble(local_itera, difficulty)

虽然sorted_count递增了,nrecursions却没有递增,我想用它来计算递归调用的次数。

请注意,此目的仅用于 作为一个独立功能(这只是原型):

  • 全局变量无法达到目的
  • 类语法开销无法达到目的

附录

我在朝着以下方向思考。

(摘自Python手册)

def whats_on_the_telly(penguin=None):
    if penguin is None:
        penguin = []
    penguin.append("property of the zoo")
    return penguin

但这也是矫kill过正。

1 个答案:

答案 0 :(得分:1)

问题似乎是,与sorted_count不同,您没有在任何地方增加对函数的调用次数。要计算递归数,您需要适当地增加它。 [操作说明:问题已更新]

此外,您的nrecursions将在每次函数调用期间重新初始化为0,因为您已将其放置在函数中。因此,您应该在函数外部将其初始化为0。

我认为,这是按如下所示增加它的正确位置。此外,您需要将变量设置为global

类型
nrecursions = 0

def sort_bubble(local_itera, difficulty):   
    global nrecursions
    # Function body

    if not sorted_count == difficulty - 1: # recurse if not sorted
        nrecursions += 1 # <--- added here
        sort_bubble(local_itera, difficulty)