面试题10:斐波那契数列
10.1 斐波那契数列
<?php header("content-type:text/html;charset=utf-8"); /* * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 P74 */ function Fibonacci($n) { if($n < 0 || $n > 39){ return false; } if($n <= 1){ return $n; } $res = 0; $res1 = 0; $res2 = 1; for($i = 2;$i<=$n;$i++){ $res = $res1 + $res2; $res1 = $res2; $res2 = $res; } return $res; } $n = 39; echo Fibonacci($n);
10.2 跳台阶
<?php header("content-type:text/html;charset=utf-8"); /* * 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 P77 */ function jumpFloor($number) { if($number < 0){ return false; } if($number <= 2){ return $number; } $res = 0; $res1 = 1; $res2 = 2; for($i = 3;$i <= $number;$i++){ $res = $res1 + $res2; $res1 = $res2; $res2 = $res; } return $res; } $n = 2; echo jumpFloor($n);
10.3 矩形覆盖
<?php header("content-type:text/html;charset=utf-8"); /* * 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? P79 */ function rectCover($number) { if($number <0){ return false; } if($number <=2){ return $number; } $res = 0; $res1 = 1; $res2 = 2; for($i = 3;$i<=$number;$i++){ $res = $res1 + $res2; $res1 = $res2; $res2 = $res; } return $res; }
10.4 变态跳台阶
<?php header("content-type:text/html;charset=utf-8"); /* * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 P78 */ function jumpFloorII($number) { if($number <=0){ return false; } return pow(2,$number-1); }