递归函数

递归函数

递归函数:在函数的内部,可以调用其他的函数,如果一个函数在内部调用自身本身,这个函数就是递归函数.

递归调用:一个函数调用自身,成为递归函数

使用递归解决问题的思路:

  • 1.写出临界条件
  • 2.找这一次和上一次的关系
  • 3.假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果

使用递归的时候考虑的问题:

  • 1.效率问题
  • 2.递归栈溢出的问题

使用递归函数需要注意防止栈溢出,在计算机中函数是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,就会增加一层栈帧,每当函数返回,栈就会减一层栈帧,栈的大小是有限制的,所以当调用的次数过多的时候,会导致栈溢出
因此,通常开发过程中不建议使用递归.

递归函数的优点是定义简单,逻辑清晰,理论上所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰.

需求:计算n! = 1x2x3x4x…x(n-1)xn

# 关系: n!= (n-1)!xn
def fact(n):
	#临界条件
	if n==1:
		return 1
	#返回本次的调用结果
	return n*fact(n-1)

求斐波那契数列:1,1,2,3,5,8,13,21,34,55,89…
需求:报一个数,直接获取这个位置上的数值

斐波那契数列:
1、1、2、3、5、8、13、21、34、……
n=1   f(1) = 1
n=2   f(2)  = 1
n=3   f(3) = f(1)+f(3)
...
f(n) = f(n-1)+f(n-2)
#关系 第n个位置上的数值=(n-1)+(n-2)
#临界值 第一个位置和第二个位置的值为1
def func1(n):
	if n==1 or n==2:
		#临界值
		return 1
	else:
		#返回本次调用的结果
		return func1(n-1) + func1(n-2)

练习 从控制台输入输入一个数,递归求和.

1+2+3+..+n
n = 1  f(1) = 1
...
f(n-1) = f(n-2)+(n-1)
f(n) = f(n-1)+n
def func(n):
    if n == 1:
        return 1
    else:
        return func(n-1)+n

print(func(99))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值