编程思想:
如何利用数学模型,来解决对应的需求问题;然后利用代码实现对应的数据模型。
算法:使用代码实现对应的数学模型,从而解决对应的业务问题
程序 = 算法 + 数据结构
在经常使用的算法中,有两种非常常用的算法:
递推算法 + 递归算法
,专门用于解决一些比较复杂,但是拆分后相似度又非常高的程序。
什么是递归算法
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
① 简化问题:找到最优子问题(不能再小) ② 函数自己调用自己
def func():
# 自己调用自己-------需要有----结束的条件
func()
func()
递归两种重要的元素
递归有两个非常重要的概念:
① 递归点:找到解决当前问题的等价函数(先解决规模比当前问题小一些的函数,依次类推,最终实现对问题的解决)------有递有归
② 递归出口:当问题解决的时候,已经到达(必须存在)最优问题,不能再次调用函数了
注:如果一个递归函数没有递归出口就变成了死循环
编写递归三步走
① 明确你这个函数想要干什么
如:求斐波那契数列
② 寻找递归结束条件
如:就是在什么情况下,递归会停止循环,返回结果
③ 找出函数的等价关系式----------可以通过自己列举,找到规律
如:斐波那契数列,第n位 f(n) = f(n-1) + f(n-2)
案例:使用递归求斐波那契数列
第一步:明确这个函数想要干什么(先定义出来,明确调用方式)
# 斐波那契数列 1 1 2 3 5 8 13 21 ...
def f(n): # 先定义一个函数,求结果。
# 编写递归代码求第n位的结果
# 调用函数-----根据定义的函数,求结果。
print(f(15)) # 610
第二步:寻找递归的结束条件
# 斐波那契数列 1 1 2 3 5 8 13 21 ...
def f(n): # 先定义一个函数,求结果。
# 编写递归代码求第n位的结果------根据递归的结束条件
if n == 1 or n == 2:
return 1
# 调用函数-----根据定义的函数,求结果。
print(f(15)) # 610
第三步:找出函数的等价关系式(最关键的一步)
# 斐波那契数列 1 1 2 3 5 8 13 21 ... def f(n): # 先定义一个函数,求结果。 # 编写递归代码求第n位的结果------根据递归的结束条件 if n == 1 or n == 2: return 1 # 找出与斐波那契数列等价的关系式 return f(n-1) + f(n-2) # 调用函数-----根据定义的函数,求结果。 print(f(15)) # 610
图示--------就很简单,不用像 递推算法那么麻烦,利用字典方式求斐波那契数列值