递归走台阶

本文探讨了经典的阶梯问题,即每次可以跨1个或2个台阶,计算走n个台阶的不同走法。通过递归公式f(n)=f(n-1)+f(n-2)阐述解题思路,并给出简单的Java伪代码实现。同时,分析了递归的优缺点,包括空间复杂度、堆栈溢出风险和重复计算问题。最后,指出了递归解决问题需满足的三个条件:子问题分解、相同求解思路和递归终止条件。
摘要由CSDN通过智能技术生成

假如这里有 n 个台阶,每次你可以跨 1 个台阶或者 2 个台阶,请问走这 n 个台阶有多少种走法?

分析问题

n = 1 时有一种走法
n = 2 时有两种走法
f(n) = f(n-1)+f(n-2)种走法
上编码:

	public int taij(int n){
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        return taij(n - 1) + taij(n - 2);
    }

以上代码,只能算伪代码,没有边界条件的判断,也没有重复计算的优化,如果实际使用,还需多多完善。
递归有利有弊,利是递归代码的表达力很强,写起来非常简洁;而弊就是空间复杂度高、有堆栈溢出的风险、存在重复计算、过多的函数调用会耗时较多等问题

递归需要满足的三个条件

  1. 一个问题的解可以分解为几个子问题的解
  2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
  3. 存在递归终止条件

注意事项

每调用一个函数,都会将临时变量封装为栈帧压入内存栈,等函数执行完成返回时,才出栈。系统栈或者虚拟机栈空间一般都不大。如果递归求解的数据规模很大,调用层次很深,一直压入栈,就会有堆栈溢出的风险。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值