cs61A - Lecture 6 Recursion

214 阅读1分钟

闭包和递归

def print_sums(n):
    print(n)
    def next_sum(k):
        return print_sums(n+k)
    return next_sum

print_sums(1)(3)(5)


这里我们可以看到print_sums(n+k)是递归调用,但外面套了一层函数,是闭包

闭包返回一个函数引用,所以可以进行 print_sums(1)(3)(5)反复调用

同时我们可以看到在这两层函数里的生命周期中,第一层函数n的变量由于通过递归传进去闭包里,所以才可以累加

于是又派生出一个问题点,通过f2层的函数递归传print_sums(n+k)给f1 print_sum(n),然后再继续传给 next_sum(k)下的print_sums(n+k)的n

f2 -> next_sum -> print_sums(n+k) | f1 print_sums(n)