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

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

一个共有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.展示所有情况的非递归方法:

 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));


posted on 2011-02-18 13:32  漫长路  阅读(802)  评论(2编辑  收藏  举报
宝宝客 www.baobaoke.com