算法 爬梯子(斐波那契函数)

本文探讨了经典的爬楼梯问题,即如何计算到达楼顶的不同方法数量。通过分析,我们发现该问题与斐波那契数列紧密相关,并提供了两种解决方案:一种是递归的暴力方法,另一种是利用斐波那契数列的特性进行优化,避免了重复计算。

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

思路:

台阶n1234n-2n-1n
方法1235f(n-2)f(n-1)f(n)

要到达n阶台阶,必须从n-2阶跨两步,或者n-1阶跨一步
所以,n阶的方法f(n)可以为f(n-2)+f(n-1)

  1. 暴力方法(此方法会造成内存溢出)
    function climbStairs($n) {
    	if ($n<3) return $n;
        return climbStairs($n-2)+climbStairs($n-1);
    }
  1. 斐波那契函数(其实就是个f(n)=f(n-1)+f(n-2))
    function climbStairs($n) {
    	$arr[1] = 1;
    	$arr[2] = 2;
    	for ($i=3;$i<=$n;$i++) {
    		$arr[$i] = $arr[$i-1]+$arr[$i-2];	
    	}
    	return $arr[$n];
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值