python篇 递归概念

1.递归概念


所谓递归,说人话就是在函数内部,去调用自己


2.递归条件:


1.自己调用自己。
2.要有结束条件。


3. 实际举例:


n的阶乘

#阶乘求n的阶乘
def faction(n):
	if n==1:
		return 1
	else:
		return n*faction(n-1)
print(faction(5))
结果 :120

4.栈溢出

  • 如果递归的次数太大,会造成栈溢出的情况。*
#阶乘求n的阶乘
def faction(n):
	if n==1:
		return 1
	else:
		return n*faction(n-1)
print(faction(1000))
结果RecursionError: maximum recursion depth exceeded in comparison

5.栈溢出解决:尾递归


尾递归调用自己的时候没有任何表达式。
#阶乘求n的阶乘
def faction(n):
	return fact_iter(n,1)

def fact_iter(num,product):
	if num==1:
		return product
	return fact_iter(num-1,num*product)
print(faction(5))

调用自己

结果maximum recursion depth exceeded in comparison

如上所示,尾递归不是一定能解决栈溢出,其他语言对于栈溢出有所优化,尾递归不会增加其栈的长度,但python对于此没有优化,所以严格意义上,尾递归并不能实际解决python的栈溢出情况,不过还是要提一下,至少要认识,这对于学习其他语言是很有好处的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值