递归之斐波那契数列,爬楼梯问题
什么是递归呢?
一个大的问题f(n)可以被拆解为小一点的问题f(n-1)和f(n-2),……直到然后拆到最小的问题f(1)和f(2)。很多人把从大往小算的形式称作递归
我们用一个题目引入:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:
f(x)=f(x−1)+f(x−2)
它意味着爬到第 x级台阶的方案数是爬到第x−1级台阶的方案数和爬到第x−2级台阶的方案数的和。
以上递推性质为斐波那契数列。因此,本题可转化为 求斐波那契数列的第x项,区别仅在于初始值不同。
爬楼梯问题: f(0)=1 , f(1)=1 , f(2)=2 。
斐波那契数列问题: f(0)=0 , f(1)=1 , f(2)=1 。
因此本题 f(0)=1,f(1)=1,f(2)=1,可由此编写递归函数。
1 2 3 4 5 6 7 8 9 | public static int climbStairs( int n) { if (n== 1 ) { return 1 ; } if (n== 2 ) { return 2 ; } return climbStairs(n- 1 )+climbStairs(n- 2 ); } |
这样我们可以得出本题的解,但是此方法并不是最优,通过递归很容易发生的问题就是重复计算,这里只是以题目引出递归的方法。
动态规划爬楼梯问题:动态规划-爬楼梯问题 - RTH030 - 博客园 (cnblogs.com)
力扣官方题解链接:https://leetcode.cn/problems/climbing-stairs/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)