首先教程里说到递归就是函数自己调用自己,这个还能理解,然后把练习的代码放上。
def sum_numbers(num):
if num == 1:
return 1
temp = sum_numbers(num - 1)
return num + temp
result = sum_numbers(5)
print(result)
如题在函数,是当数==1的时候就跑出,相当于每一次执行到 temp = sum_numbers(num - 1)的时候只要不==1就会 一直调用函数,因为if里面有return.那么最后一条return num + temp这一条。应该不再 执 行 了。但实际运行的时候还是有执行 的。
当num == 1的时候到了return num + temp的时候这时候temp=1 ,num = 2
但是我不明白num =2是怎么得出 的。再执行 num = 3 temp=3 有点迷糊 了
道理很简单,函数的参数的作用域在函数内,
sum_numbers(num - 1)
在外侧调用函数看来,传进去的是num - 1
在这个函数执行的内部,num变量的值等于外侧num-1
函数递归,每个递归内的参数和变量,都是独立的。
好比
def foo(a):
print(a)
b = 1
foo(b)
这段代码,从外侧看,传的是b
到了函数内,b不见了,a就是b。
确实不再执行了,但是你又生出了一个函数sum_number(n-1),这个又会执行, return后又会生成一个 函数,一直到最后是1的时候就没有生成了那就是1,然后所有的加起来就是1加上很多个num