当前位置: 首页 > news >正文

会展免费网站模板网站优化课程

会展免费网站模板,网站优化课程,如何做一个公司的网站,手机网站要域名吗一只青蛙要跳上有 n 级的台阶,每次只能跳 1 级或 2 级台阶,问青蛙总共有多少种不同的跳法?暴力递归算法 我们按照最后一步是跳1阶还是跳2阶,将所有的方案划分成不重不漏的两个集合S(n−1)S(n-1)S(n−1)和S(n−2)S(n-2)S(n−2)&…

一只青蛙要跳上有 n 级的台阶,每次只能跳 1 级或 2 级台阶,问青蛙总共有多少种不同的跳法?

暴力递归算法

我们按照最后一步是跳1阶还是跳2阶,将所有的方案划分成不重不漏的两个集合S(n−1)S(n-1)S(n1)S(n−2)S(n-2)S(n2),两个集合方案数之和就是n阶的方案数。

子集合 S(n−1)S(n-1)S(n1)(最后一步跳 1 级):跳到第 5 级前,已先到第 4 级,对应 “跳到第 4 级的所有跳法”:

  • 1->2->3->4->5(最后 1 级:4→5)
  • 1->2->4->5(最后 1 级:4→5)
  • 1->3->4->5(最后 1 级:4→5)
  • 2->3->4->5(最后 1 级:4→5)
  • 2->4->5(最后 1 级:4→5)

子集合 S(n−2)S(n-2)S(n2)(最后一步跳 2 级):跳到第 5 级前,已先到第 3 级,对应 “跳到第 3 级的所有跳法”:

  • 1->2->3->5(最后 2 级:3→5)
  • 1->3->5(最后 2 级:3→5)
  • 2->3->5(最后 2 级:3→5)

这个问题我们要求出方案数,而非具体的方案,因此有
∣S(n)∣=∣S(n−1)∣+∣S(n−2)∣ |S(n)| = |S(n-1)| + |S(n-2)| S(n)=S(n1)+S(n2)
简单而言
f(n)=f(n−1)+f(n−2) f(n) = f(n-1) + f(n-2) f(n)=f(n1)+f(n2)

代码写起来也非常的简单

def f(n):if n == 1:return 1if n == 2:return 2return f(n-1) + f(n-2)
f(6)
f(5)
f(4)
f(4)
f(3)
f(3)
f(2)=2
f(3)
f(2)=2
f(2)=2
f(1)=1
f(2)=2
f(1)=1
f(2)=2
f(1)=1

在思考这个递归树的时候,有两种思路,一种就是f(n)表示的是所有的方案,f(n-1)是跳的n-1阶的所有方案,f(n-2)是跳到n-2阶的所有方案。另一种呢就是直接表示方案数,但是对我而言,这种比较难以理解,这种理解更偏向于数学抽象。

打印所有的方案

def f(n):"""生成青蛙跳上n级台阶的所有「台阶编号路径」每个路径是一个列表,包含依次经过的台阶编号(最终到达n)例如n=2时,返回[[1,2], [2]],对应路径0→1→2和0→2"""# 边界情况:0级台阶,无需跳跃,路径为空if n == 0:return [[]]# n=1:只有一种路径:0→1if n == 1:return [[1]]# n=2:两种路径:0→1→2 或 0→2if n == 2:return [[1, 2], [2]]res = []# 1. 从n-1级跳1级到n:所有到达n-1的路径后加narr1 = f(n-1)for path in arr1:res.append(path + [n])# 2. 从n-2级跳2级到n:所有到达n-2的路径后加narr2 = f(n-2)for path in arr2:res.append(path + [n])return res# 测试n=5
print("n=5的台阶编号路径:")
for i, path in enumerate(f(5), 1):print(f"方案{i}{path}")

当然也可以直接打印

def print_frog_paths(n, current_path=None):"""直接打印青蛙跳上n级台阶的所有路径(台阶编号)参数:n: 目标台阶数current_path: 当前已走过的路径(用于递归传递)"""# 初始化当前路径if current_path is None:current_path = []# 递归终止条件:已到达目标台阶if n == 0:# 打印当前完整路径print("→".join(map(str, current_path)))return# 情况1:最后一步跳1级(如果可能)if n >= 1:print_frog_paths(n - 1, [n] + current_path )# 情况2:最后一步跳2级(如果可能)if n >= 2:print_frog_paths(n - 2, [n] + current_path)def main():try:n = int(input("请输入台阶的级数:"))if n < 0:print("台阶级数不能为负数!")elif n == 0:print("0级台阶无需跳跃!")else:print(f"青蛙跳上{str(n)}级台阶的所有路径:")print_frog_paths(n)except ValueError:print("请输入有效的整数!")if __name__ == "__main__":main()
frog_paths(5)
frog_paths(4, [5])
frog_paths(3, [5])
frog_paths(3, [4, 5])
frog_paths(2, [4, 5])
frog_paths(2, [3, 5])
frog_paths(1, [3, 5])
frog_paths(2, [3, 4, 5])
frog_paths(1, [3, 4, 5])
frog_paths(1, [2, 4, 5])
frog_paths(0, [2, 4, 5])
frog_paths(1, [2, 3, 5])
frog_paths(0, [2, 3, 5])
frog_paths(0, [1, 3, 5])
frog_paths(1, [2, 3, 4, 5])
frog_paths(0, [2, 3, 4, 5])
frog_paths(0, [1, 3, 4, 5])
frog_paths(0, [1, 2, 4, 5])
frog_paths(0, [1, 2, 3, 5])
frog_paths(0, [1, 2, 3, 4, 5])
http://www.dtcms.com/a/578574.html

相关文章:

  • 【赵渝强老师】Redis数据的迁移
  • Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
  • Rust开发完全指南:从入门到与Python高效融合
  • 石家庄免费建站模板我不想找之前做网站的续费
  • 商城网站模板 免费五个跨境电商平台
  • 无人设备遥控器之数字图传技术
  • 哪个网站用织梦做的2017网站开发就业前景
  • 网站设计公司深圳ppt的网站导航栏怎么做的
  • React中的componentWillUnmount 使用
  • 培训型网站建设中华建设网站
  • 大型网站建设公司推荐店面设计餐饮
  • 中山品牌网站建设推广注册域名成功后怎样建设网站
  • 化妆品网页设计模板素材做网站优化用什么软件
  • 移动端高端网站怎么帮商家推广赚钱
  • 餐饮网站源码一个网站有几个快照
  • Windows Qt打开外部程序
  • 怎么建设商品网站网站建设首选公司
  • 西宁网站建设加盟代理北京高端网站制作公司
  • 微信小程序minium自动化测试SOP
  • 如何做好电子商务网站开发企业网站博客上如何营销
  • 【LeetCode】103. 二叉树的锯齿形层序遍历
  • 车联网终端TBOX车载无线4G网络盒子知识详解
  • 什么网站能免费做公众号封面做一个平面网站的成本
  • 作业11.6
  • 做网站项目流程国外文件传输网站
  • 论文分享 |重新思考3D分割:Unified-Lift——端到端的高斯泼溅场景分割新范式
  • xwiki做的网站邢台同城
  • 网站建设工作台账饲料公司网站建设方案
  • 初识MYSQL —— 内置函数
  • 吉林大学建设工程学院 旧网站国外网站免费dns