1. 樓梯有n個台階,上樓可以一步上1階,也可以一步上2階,一共有多少種上樓的方法? 斐波那契數列 第一項為1 第二項為2 也就是f(n)=f(n-1)+f(n-2),用遞歸求。 給個分析的例子: 有一個11級的台階,一個人可走一步也可走兩步,問這個人有多少種方法走完這個台階? 解: ①只用一步走:1+1+1+1+1+1+1+1+1+1+1=11,共11步,只有C11,1=1種走法。 ②用了一次兩步走:1+1+1+1+1+1+1+1+1+2=11,共10步,有C10,1 =10種走法。 ③用了兩次兩步走:1+1+1+1+1+1+1+2+2=11,共9步,有C9,2 =36種走法。 ④用了三次兩步走:1+1+1+1+1+2+2+2=11,共8步,有C8,3= 56種走法。 ⑤用了四次兩步走:1+1+1+2+2+2+2=11,共7步,有C7,4=35種走法。 ⑥用了五次兩步走:1+2+2+2+2+2=11,共6步,有C6,1=6種走法。 總共有1+10+36+56+35+6=144種 理論上分析:只有一個台階的話,只有1種走法,2級台階的話,可以一步一個台階走,也可以一步2個台階走,共有2種走法。 當台階數大於等於3之后,可以這么分析:如果最后一步走一個台階,那么就是n-1個台階的走法的種類,如果最后一步走兩個台階,那么就是n-2個台階的走法的種類,所以n個台階的走法種類就是n-1個台階和n-2個台階的走法的總和。因此,這是一個遞歸函數。也是一個裴波那契函數。 下面給出一個C++程序: #include<iostream> using namespace std; int fstep(int n) { if(n==1)return 1; if(n==2)return 2; if(n>=3)return fstep(n-2)+fstep(n-1); return 0; } int main() { int n,step; cout<<"input the steps of the stair:"<<endl; cin>>n; step=fstep(n); cout<<"The methods to finish the stair are: "<<step<<endl; return 0; }