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

时间:2019-03-29 12:54:21

标签: python for-loop recursion counting

我试图通过一个生成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)

1 个答案:

答案 0 :(得分:0)

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

text_file = open('test-file.txt', 'r+')
read_the_file = text_file.read()
text_file.close()

text_file = open('test-file.txt', 'a+')
new_string = 'Smack Alpha learns python'

if new_string not in read_the_file:
    text_file.write(new_string + '\n')
text_file.close()

这将同时打印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)) (如n *(n + 1)/ 2)。闭包只是一个功能(这里是55)和一个环境(某些上下文将名称映射到变量,这里是f)所伴随的功能。这意味着a可以从a内部进行访问,就好像它是一个局部变量一样,但它并不完全是一个局部变量,它是一个free variable

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