03高阶函数&递归函数
一、高阶函数
满足以下要求的可称为高阶函数:
- 函数名可以进行赋值
- 函数名可以作为函数参数,
- 函数名可以作为函数的返回值
作为函数返回值示例
def foo(): def f(): return 8 return f #此时f函数就是一个高阶函数 ret = foo() print(ret) #<function foo.<locals>.f at 0x000001F4B97D8CA0> 函数f对象的内存地址 print(ret()) #8
作为函数的参数示例
def func(n): return n*n def foo(x,y,f): ret = f(x)+f(y) return ret print(foo(4,5,func)) #41 将func作为实参赋给形参f,即让f使用函数func的功能,函数func为高阶函数
二、递归函数
关于递归函数的特性:
-
重复调用自身函数
-
必须有一个结束条件
凡是递归函数可以解决的问题,for、while循环方法都可以解决,而且递归函数的效率低(在处理大量代码时)
实现数学中的阶乘式子
def func(n): ret = 1 for i in range(1,n+1): #range()序列,参数左包右不包 ret *= i #实现累乘 return ret print(func(5)) #120
如果用递归函数怎么解决呢?
我们先来看看阶乘式子的特点:1*2*3*4*···(n-1)*n
而递归函数的其中一个特点是重复调用自己,即是n*(n-1)中(n-1)又可以等于(n-1)*(n-2),以此类推实现阶乘
def factorial(n): if n==1: #根据实际情况定义结束条件(必需) return n return n*factorial(n-1) #不断调用自身 print(factorial(5)) #120
三、应用举例
斐波那契数列:0、1、1、2、3、5、8、13、21、34、…… ,
递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
情形一:递归函数实现输出斐波那契数列第n位 默认第一项为1开始
def Fibonacci(n): if n<= 1: return n return Fibonacci(n-1) + Fibonacci(n-2) print(Fibonacci(8))
情形二:根据f(n)= f(n - 1) + f(n - 2) 根据要求连续分别输出斐波那契数列第n位的数字(从第三位数字开始)
Fbs = [1,1] #斐波那契数列前两位 n = 3 s = input('Max_NUm:') #输入最大次数 while n != (int(s) + 1): #因为差一原则所以要再加一(不+1则会出现错位即第n位是第n-1位的值) before = Fbs[-2] after = Fbs[-1] fb = before + after c = ''.join(['斐波那契数列第',str(n),'位:',str(fb)]) print(c) n = n + 1 Fbs.append(fb)
情形三:自由输出在3000以内的斐波那契数列
(1)从最大值考虑
Max_Num = int(input('Please input a maxnumber:')) def Fibonacci(x): c = [] before , after = 0 , 1 while before < x: before , after = after , before + after c.append(before) print(c) Fibonacci(Max_Num)
(2)从位数考虑
num = int(input('Please input a number:')) def Flibs(x): list = [] for i in range(x): if i <= 1: list.append(1) else: list.append(list[-2]+list[-1]) print(list) Flibs(num)
这些是个人在学习过程中整理的笔记,仅供参考!欢迎大家指正和提问!整理不容易,花了不少时间,后续会接着整理,要是觉得好对您有用还请不要忘了点赞收藏转发+关注哦🤞🤞🤞