Python递归逆向思维

设置递归深度 栈溢出

import sys
sys.setrecursionlimit(100000)

普通高斯求和

def sum(n):
	total = 0
	for i in range(1,n+1):
		total += i
	return total
print(sum(5))

递归高斯求和

def sum_number(n):
	if n == 0:
		return 0
	return n + sum_number(n-1)
print(sum_number(5))

5+sum_number(4)
5+(4+sum_number(3))
5+(4+(3+sum_number(2)))
5+(4+3+(2+sum_number(1)))
5+(4+3+2(1+sum_number(0)))

5+4+3+2+1 = 15 每次有返回值就得存一次 所以消耗内存

尾递归:当前的计算结果作为参数传给下一次 性能尾递归稍微好一点

def tail_sum(n,result=0):
	if n == 0:
		return result
	return tail_sum(n-1,result+n)
print(tail_sum(5))

tail_sum(5,0)
tail_sum(4,5)
tail_sum(3,9)
tail_sum(2,12)
tail_sum(1,14)
tail_sum(0,15)

结果将参数传递 看起来差不太多 逻辑是不一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值