楼梯算法相关

阿管百度之行后,记载楼梯算法相关:

题目大家都知道,大致为:

一个共有N个台阶的楼梯,从下面走到上面。一次只能迈一个台阶或两个台阶,并且不能后退,走完这个楼梯共有多少种方法?

 

1. 递归方法

 1  // php
 2  function  up( $n )
 3  {
 4       if ( $n   ==   2 )
 5           return   2 ;
 6       elseif ( $n   ==   1 )
 7           return   1 ;
 8 
 9       return up( $n - 1 ) + up( $n - 2 );
10  }
11  echo  up( 10 );

2.非递归方法

1  function  up( $n )
2  {
3       $a   =   array ( 1 ,   2 );
4       for ( $i   =   3 $i   <=   $n $i ++ ){
5           $a [ $i =   $a [ $i - 1 +   $a [ $i - 2 ];
6      }
7       print_r ( $a );
8  }
9 up(10);

3.如果说要展示出所有的情况的递归方法:

1  function  up_out( $n)
 2  {
 3       if ( $n   ==   1 )
 4           return   array ( ' ' );
 5       else   if ( $n   ==   2 )
 6           return   array ( ' 1 1  ' ,   ' ' );
 7       return   array_merge (lian(up_out( $n - 1 ) , ' ' ) ,  lian(up_out( $n - 2 ) ,   ' ' ));
 8  }
 9  function  lian( $a1 ,   $a2 )
10  {
11       foreach ( $a1   as   & $a1_v ) {
12           $a1_v   =   $a1_v   .   $a2 ;
13      }
14       return   $a1 ;
15  }
16 print_r (up_out( 10 ));

4.展示所有情况的非递归方法:

ExpandedBlockStart.gif
 1  function  up_out( $n )
 2  {
 3       $re   =   array ( array ( 0 ) ,   array ( ' ' ) ,   array ( ' 1 1  ' ,   ' ' ));
 4       for ( $i   =   3 $i   <=   $n $i ++ ) {
 5           $re [ $i =   array_merge (lian( $re [ $i - 1 ] ,   ' ' ) ,  lian( $re [ $i - 2 ] ,   ' ' ));
 6      }
 7       return   $re ;
 8  }
 9  function  lian( $a1 ,   $a2 ) {
10       foreach ( $a1   as   & $a_v ) {
11           $a_v   =   $a_v   .   $a2 ;
12      }
13       return   $a1 ;
14  }
15  print_r (up_out( 10 ));


转载于:https://www.cnblogs.com/liulei/archive/2011/02/18/1957700.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值