PHP上台阶问题(斐波纳契数列应用)

题目:

     有个人想上一个50层的台阶,但他一次只能迈一层或两层台阶,问:这个人有多少种方法可以把台阶走完?

     

分析:先列举几个实例:1代表迈一层,2代表迈2

一层:1

二层:11  2

三层:111 12 21

四层:1111 121 211 112 22

五层:11111 2111 1211 1121 1112 221 212 122 

我们可以看到从第三层开始的走法等于上两层的走法之和,这个符合斐波纳契数列(斐波纳契数列指数列的第一项和第二项已知,那么后面的项等于前面两项的和,比如,第四项=第三项+第二项)。我们可以这样理解,当我们走到50层的时候,最后他有两种到达50层的途径:

  1. 49层走一层,
  2. 48层走两层,

那么,到达50层所有的走法就等于到达49层的走法+到达48层的走法,依次类推,可以得到总的走法符合斐波纳契数列,知道了这,我们的代码也就好写了。

代码实现:

   <?php
   function taijie($n){
   $bf_1=2; //初始化前一项为2
   $bf_2=1;  //初始化前两项为1
   $count=1;
       if($n==1){
       return $bf_2; //如果当前是第一项显示为1
       }
       elseif($n==2){
        return $bf_1; //如果是第二项显示为2;
       }
       for($i=3;$i<=$n;++$i){
       $count=$bf_1+$bf_2; //当前项为前一项+前两项
       $bf_2=$bf_1; //下次循环前两项就变为前一项
       $bf_1=$count;  //下次循环当前项就变成了前一项
       }
       return $count;
   }
   echo taijie(50);
   ?>

 

转载于:https://www.cnblogs.com/ItcastZc/p/3524368.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值