有個同學去了騰訊,他說面試時有這么一道思維題:50個階梯,你一次可以上一階或兩階,走上去,共有多少種走法?
費波拉希數列:
peter的方法雖然不能求得50層的次數,但是可以求得前30多層。依次如下:
一共1個台階的話有1種走法.
一共2個台階的話有2種走法.
一共3個台階的話有3種走法.
一共4個台階的話有5種走法.
一共5個台階的話有8種走法.
一共6個台階的話有13種走法.
一共7個台階的話有21種走法.
一共8個台階的話有34種走法.
一共9個台階的話有55種走法.
一共10個台階的話有89種走法.
一共11個台階的話有144種走法.
一共12個台階的話有233種走法.
一共13個台階的話有377種走法.
一共14個台階的話有610種走法.
一共15個台階的話有987種走法.
一共16個台階的話有1597種走法.
一共17個台階的話有2584種走法.
一共18個台階的話有4181種走法.
一共19個台階的話有6765種走法.
一共20個台階的話有10946種走法.
一共21個台階的話有17711種走法.
一共22個台階的話有28657種走法.
一共23個台階的話有46368種走法.
一共24個台階的話有75025種走法.
一共25個台階的話有121393種走法.
一共26個台階的話有196418種走法.
一共27個台階的話有317811種走法.
一共28個台階的話有514229種走法.
一共29個台階的話有832040種走法.
一共30個台階的話有1346269種走法.
一共31個台階的話有2178309種走法.
一共32個台階的話有3524578種走法.
一共33個台階的話有5702887種走法.
一共34個台階的話有9227465種走法.
一共35個台階的話有14930352種走法.
這不正是個費波拉希數列!!!!
知道這個數學規律就好辦了。代碼如下:
function fib(n) { return function(n, a, b) { return n > 0 ? arguments.callee(n - 1, b, a + b) : a; } (n, 0, 1); } fib(0); //0 fib(1); //1 fib(2); //1 fib(3); //2 fib(4); //3 //...... fib(50); //12586269025 fib(51); //20365011074,這里是上到第50個階梯
function GetStepNum( $n) { if($n<1) return 0; if($n==1) return 1; if($n==2) return 2; if($n>2) return GetStepNum($n-1)+GetStepNum($n-2); } echo GetStepNum(10);