排序算法总结,递归,动态规划

本文介绍了递归和动态规划在解决实际问题中的应用,包括青蛙跳台阶、翻转二叉树、汉诺塔、细胞分裂、进制转换、找零兑换等多个实例,通过这些例子帮助读者理解递归和动态规划的思维框架及其解决问题的效率。同时,文章也提及了排序算法的重要性,虽然只需掌握快速排序,但递归和动态规划的思想在算法设计中至关重要。
摘要由CSDN通过智能技术生成

这或许是东半球讲十大排序算法最好的一篇文章
动画图解:十大经典排序算法动画与解析,看我就够了!(配代码完全版)
其实排序算法只要掌握快排就好了,别搞那么花哨ok?
动态规划入门
一文看懂递归

递归练习(自我调用)

1.青蛙咋跳?

一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如:跳上第 1 级台阶只有一种跳法:直接跳 1 级即可。 跳上第 2
级台阶有两种跳法:每次跳 1 级,跳两次;或者一次跳 2 级。 问要跳上第 n 级台阶有多少种跳法?

递推关系:
在这里插入图片描述

def numWays(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return numWays(n - 1) + numWays(n - 2)
print(numWays(7))
# 进阶,优化空间(这样应该直接就算是动态规划了吧)自下而上了
def numWays(n):
    dp=[0]*(n+1)
    dp[0]=1
    dp[1]=1
    dp[2]=2
    for i in range(2,n+1):
        dp[i]=dp[i-1]+dp[i-2]
    return dp[n]

2.反转二叉树

leetcode 226. 翻转二叉树

#递归方法
def invertTree( root):
    if root is None:
        return
    tem=root.leftchild
    root.leftchild=invertTree(root.rightchild)
    root.rightchild=invertTree(tem)
    return root

print(invertTree(r))

3.汉诺塔

如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数

在这里插入图片描述
找递推关系时,切忌把子问题层层展开,这样会把自己绕晕,只要找到一层问题与它的子问题的关系用递归表示即可.
解法:

  1. 把上层n-1个圆盘从a经由c移到b
  2. 把剩下最后一个圆盘直接从a移到c
  3. 把b上面的n-1个圆盘从b经a移到c
def hanno(n,a,b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值