感谢大神 itmeng 的技术支持 在遇到问题的时候参考大神的解决方法 自己理解
递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。
使用递归的条件时 注意以下几点
- 递归就是在过程或函数里调用自身
- 必须明确递归终止的条件(防止函数无限调用)
递归的典型算法
求阶乘 以5的阶乘为例
def fun(n):
if n<=1:
return n
return n*fun(n-1)
print(fun(5))
递归实现斐波那契数列:
'''
斐波那契数列:
f(n) = 1 当n = 1,2时
f(n) = f(n-1) + f(n-2) 当n > 2时
比如: [1,1,2,3,5,8,13,21,34,55]
'''
def fibonacci(n):
# 收敛条件
if n <= 2:
return 1
# 递归公式
return fibonacci(n-1) + fibonacci(n-2)
def main():
print(fibonacci(10))
if __name__ == '__main__':
main()
关于递归中打印有值 return显示None:
关于求和问题 使用递归时遇到了问题
def add(sum,x,y):
if x<10:
x+=2
y+=2
sum=x+y
add(sum,x,y)
else:
sum=x+y
print(sum) #20
return sum
s=add(0,0,0)
print(s) #None
print输出的时候 显示的为None 在return 之前 打印有值 有返回值 为什么还是显示None
惯性思维让我们认为return必然会使得def函数模块结束返回一个值,可实际上在递归中并不是,如果改变约束条件在return之后函数还会继续递归计算。
真正的原因是此处的return仅仅是上一次递归调用函数本身时候的返回值,而def函数块并没有返回任何值。也就是说这个return仅属于上一次递归调用,并不属于def函数块。也就是说整个def函数块没有return,也就没有出口,自然不会有数据出去,所以得到None
递归的坑 是在看大神 itmeng 的博客的时候,看到了这个问题 然后自己修改代码如下:
def add(sum,x,y):
if x<10:
x+=2
y+=2
sum=x+y
sum=add(sum,x,y)
return sum
else:
sum=x+y
print(sum)
return sum
s=add(0,0,0)
print(s)
函数运行到else时 有返回值,就相当于闭包的使用 在函数内部 需要对将函数的返回值进行返回