了解递归的特点:
- 函数内部自己调用自己
- 必须有出口(对于没用出口的递归即使死循环)
先看用普通方法求:
sum=0 for i in range(4): sum+=i print(sum)
是逐个一个接一个相加。
对于递归而言,即求
第一层:3+2以内累加和
第二层:而2以内累加和=2+1以内累加和
第三层:而1以内累加和=1(此时1这个确值即是出口)
接下来上代码分析
def sum_numbers(num): #首先定义一个函数 if num==1: #如果num是1直接返回1 即1的累加和=1 return 1 #返回这个值(出口) return num+sum_numbers(num-1) #否则,(例如求的是3 返回3+2以内的累加和) 在此再对函数调用,不过求的是2以内累加和,所以num-1 a=sum_numbers(3) #用一个变量接收 print(a) #输出结果
对于递归而言,既是有递 有归,可以想象求这个3的累加和 一层层下去,然后一层层返回
对于回的过程:第三层 num==1的时候,return返回了1这个值,这个值的实现是因为第二层调用了sum_numbers(num-1) #此时num-1=1哦,所以它会返回给第二层 即是 1赋给了第二层的sum_numbers(num-1) 。记住第二层的num是2 然后对于第二层num+sum_number(num-1) 就是2+1=3 然后return 返回这个值到了第一层 第一层的num=3 然后3+3得到了6 return返回给了函数。
再用一个变量接收函数,然后print这个变量就能得到结果
递归 必须要有一个出口,如果没有出口就会重复调用,不断的开辟栈帧空间
普通过程是有去,直接实现。 递归有去有回。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)