递归之斐波那契数列,爬楼梯问题

什么是递归呢?

一个大的问题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/

 

posted @   RTH030  阅读(187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示