Python学习---递归函数的学习
定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返 回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)
实例1: (阶乘)
# 普通方法 def factorial(num): fac = num for i in range(1, num): fac *= i return fac print(factorial(4)) # 递归实现 def factorial(num): if num == 1: # 结束条件 return 1 return factorial(num - 1) * num print(factorial(4)) # 函数式编程实现: from functools import reduce print (reduce(lambda x,y: x*y, range(1,5))) # 24
实例2:斐波那契数列
# 普通实现: # 0 1 1 2 3 5 8 13 def fibo(n): before = 0 after = 1 ret = 0 for i in range(n - 1): ret = before + after before = after after = ret return ret print(fibo(6)) # 8 # 递归实现: # 0 1 1 2 3 5 8 13 def fibo_new(n): # n可以为零,数列有[0] if n <= 1: # 结束条件 f(0)=0,f(1)=1,f(2)=f(1)+f(0)-->符合return条件,所以<=1 return n return (fibo_new(n - 1) + fibo_new(n - 2)) # f(8) = f(7) + f(6) print(fibo_new(6)) # 8 # 其他实现 def fib(max): n, b, a = 0, 0, 1 while n < max: print(b) b, a = a, b+a # 赋值是同时执行的 n += 1 fib(6) # 8
实例3:求number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]中的正数的平均值
# 递归实现 number = [2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8] count = 0 li = [] for i in range(len(number)): if number[i] > 0: li.append(number[i]) count += 1 count = str(count) print("%s个正整数的和为%d" % (count, sum(li)))
# 函数式编程
# 待写
作者:小a玖拾柒
-------------------------------------------
个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~
本文版权归作者【小a玖拾柒】和【博客园】共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!