美文网首页
Python编程题26--爬楼梯

Python编程题26--爬楼梯

作者: wintests | 来源:发表于2021-11-06 11:23 被阅读0次

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。请问有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数,其范围为:1 ≤ n ≤ 100。

例如:

给定一个正整数:2,返回结果:2

说明:共有 2 种方法爬到楼顶,第一种为 1阶 + 1阶,第二种为 2 阶。

给定一个正整数:3,返回结果:3

说明:共有 3 种方法爬到楼顶,第一种为 1阶 + 1阶 + 1阶,第二种为 1阶 + 2阶,第三种为 2阶 + 1阶。

实现思路

分析上面题目,可以发现第 n 个台阶只能从第 n-1 个台阶或第 n-2 个台阶走上去,那么就可以得到以下结论:

第 n 个台阶的走法 = 第 n-1 个台阶的走法 + 第 n-2 个台阶的走法

看到这里,是不是感觉很熟悉,没错,这不就是 斐波那契数列 嘛,不同的地方在于我们这里的第1项值是1,第二项值是2。那么接下来应该就很简单了,我们要做的就是求出 斐波那契数列 的第 n 项。

之前有写过关于 斐波那契数列 的题目,可以前往了解:Python编程题9--斐波那契数列

代码实现--非递归

def climbStairs(n):
    a, b = 1, 1
    while n > 1:
        a, b = b, a + b
        n -= 1
    return b

代码实现--递归

def climbStairs(n):
    if n == 1 or n == 2:
        return n
    return climbStairs(n - 1) + climbStairs(n - 2)

如果在算法题中,当 n 的值比较小时,上面递归解法是没什么没问题的,但如果 n 的值较大,比如上面的 n = 100 ,这个时候必然会提示超出时间限制。

return climbStairs(n - 1) + climbStairs(n - 2)

在上面代码中,每次都需要2次递归,同时会出现大量的重复计算,随着 n 的增大,导致耗时非常久,性能变得非常差,另外调用函数次数过多,也容易出现栈溢出。

因此,我们对递归代码进行优化如下:

def climbStairs_recursive(n, first, second):
    if n == 1 or n == 2:
        return n
    elif n == 3:
        return first + second
    return climbStairs_recursive(n - 1, second, first + second)

def climbStairs(n):
    return climbStairs_recursive(n, 1, 2)

优化后的代码中,我们每次只需要1次递归,并且直接通过 first、second 记录当前相加的2个数值,避免了重复计算。

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

相关文章

  • Python编程题26--爬楼梯

    题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。请问有多少种不同的方法可以爬...

  • 第五周学习计划

    本周学习python相关内容,练习sql题,练习python编程题,尽量跟进度Õ_Õ

  • Python编程题汇总(持续更新中……)

    下列为一些常见的Python编程题,主要用于学习和巩固所学知识。 Python编程题1---九九乘法表[https...

  • 第五周学习总结

    本周已看了python基础知识的相关视频和PDF,练习了几道编程题,做编程题很没思路。

  • python编程题

    1、台阶问题、斐波那契 一只青蛙可以跳上一级台阶,也可以跳上两级台阶,求青蛙跳上一个n级台阶共有多少种跳法 方法一...

  • 学习记录17.7.30

    编程部分 Python列表,元组,条件判断,循环,函数定义,切片 Leetcode题目5题(分别用Python,C...

  • 《Python语言程序设计》第一章.练习与作业

    编程题 1.1 编程题 1.2 编程题 1.3 编程题 1.4 编程题 1.5 编程题 1.6 编程题 1.7 编...

  • python编程题-基础

    求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(...

  • python编程题-基础

    1. 求1到100之间所有数的和、平均值 2. 计算1-100之间能3整除的数的和 3. 计算1-100之间不不能...

  • python编程题-基础

    list_all = [12, 45, 78, 59, 326, 448, 12, 4, 8, 151, 54, ...

网友评论

      本文标题:Python编程题26--爬楼梯

      本文链接:https://www.haomeiwen.com/subject/igolaltx.html