0
点赞
收藏
分享

微信扫一扫

算法和数据结构1.1

yongxinz 2022-02-06 阅读 83
算法

一.递归

定义:在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。

递归问题

递推问题作为动态规划的基础,是最好掌握的,也是必须掌握的,它有点类似于高中数学中的数列,通过 前几项的值 推导出 当前项的值

比较经典的类型就是 斐波那契数列 an=an-1 +an-2

a=0
b=1
while b < 1000:
    print(b)
    a, b = b, a+b

二维递归

比较经典的有杨辉三角

 在二维列表中 行代表第一维  列代表第二维

下面是用代码实现的杨辉三角

#先定义阶层函数,求出阶层
def fact(n):
    if n == 0:
        return int(1)
    else:
        return int(n*fact(n-1))

#再定义组合函数,求出组合C(n,m)的值
def com(n,m):
    return fact(n)/(fact(m)*fact(n-m))

#调用cum函数,输出结果
i = int(input("请输入阶层:"))
n=0
while n <=i :
    for m in range(n+1):
        result = str(int(com(n,m))) #注意,cum的计算结果是float型,需要转换成str才能插入列表,转换之前先用int化成整型,去掉小数点
        print(result,end = "\t")
    print("")
    n += 1
#运行结果:
请输入阶层:8
1	
1	1	
1	2	1	
1	3	3	1	
1	4	6	4	1	
1	5	10	10	5	1	
1	6	15	20	15	6	1	
1	7	21	35	35	21	7	1	
1	8	28	56	70	56	28	8	1	

二.线性dp

最小花费

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        dp=[0 for _ in range(len(cost))]
        dp[0],dp[1]=cost[0],cost[1]
        for x in range(2,len(cost)):
            dp[x]=min(dp[x-2]+cost[x],dp[x-1]+cost[x])
        return min(dp[-1],dp[-2])
举报

相关推荐

0 条评论