如何创建一个递归函数,生成多个for循环并计算总次数

2024-06-08 16:54:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过一个递归函数来计算调用的总次数,这个递归函数生成n个for循环,但是这个变量似乎永远不会改变它的值。你知道吗

a=0

def recursivelooping(times,volumes):
    if times==0:
        a+=1
    else:
        for i in range(volumes):
            return recursivelooping(times-1,i)

结果应该更像下面的变量a,但是我总是得到一个零。你知道吗

def multiforloop(volumes):
    a=0
    for i in range(volumes):
        for j in range(i):
            for k in range(j):
                a+=1
    print(a)

Tags: inforreturnifdefrange次数else
1条回答
网友
1楼 · 发布于 2024-06-08 16:54:15

如果我理解正确的话,闭包可能是最短的解决方案:

def recursivelooping():
    a = 0
    def f(times, volumes):
        nonlocal a
        if volumes == 0:
            return a

        # Inner loop
        for t in range(times):
            for j in range(volumes):
                a+=1

        # Outer loop
        return f(times, volumes-1)
    return f

def multiforloop(times, volumes):
    a=0
    for i in range(volumes+1):
        for t in range(times):
            for j in range(i):
                a+=1
    return a

print(recursivelooping()(1, 10))
print(multiforloop(1, 10))

这将同时打印55(如n*(n+1)/2)。闭包只是一个函数(这里是f),伴随着一个环境(一些将名称映射到变量的上下文,这里是a)。这意味着a可以从f内部访问,就像它是一个局部变量一样,但它并不完全是一个局部变量,而是一个free variable

编写a += 1时,通常的行为是查找名为a的局部变量,而这里a是一个自由变量,这就是为什么我们需要添加nonlocal关键字来指定它。你知道吗

相关问题 更多 >