1. 程式人生 > >樓梯有n階臺階,上樓可以一步上1階,2階,3階,程式設計序計算共有多少種不同的走法?

樓梯有n階臺階,上樓可以一步上1階,2階,3階,程式設計序計算共有多少種不同的走法?

提示:設n階臺階的走法數為f(n)。如果只有1個臺階,走法有1種(一步上1個臺階),即f(1)=1;如果有2個臺階,走法有2種(一種是上1階,再上1階,另一種是一步上2階),即f(2)=2;如果有3個臺階,走法有4種(一種每次1階,共一種;另一種是2+1,共兩種;第三種是3,共1種),即f(3)=4;

當有n個臺階(n>3)時,我們縮小問題規模,可以這樣想:最後是一步上1個臺階的話,之前上了n-1個臺階,走法為f(n-1)種,而最後是一步上2個臺階的話,之前上了n-2個臺階,走法為f(n-2)種,故而f(n)=f(n-1)+f(n-2)。列出的遞迴方程為:
f(1)=1;
f(2)=2;

f(3)=4;

if(n==1)

return 1;

else if(n==2)

return 2;

else if(n==3)

return 4;

else

return  f(n-1)+f(n-2)+f(n-3),n>3

據此可以程式設計序求解f(n)的值。

for  C++:

#include<iostream>
using namespace std;
void Circul(const int n);
void main(){
  int n;
  cout << “請輸入臺階數。。。。”<<endl;
cin >> n;
Circul(n);
}

void Circul(const int n){

      int i;
      int a[100];
      a[1]=1;
      a[2]=2;
      a[3]=4;

if (n==1){

   cout<<a[1]<< endl;
   return;

}else if(n==2){

   cout<< a[2]<<endl;
   return;

}else if(n==3){

   cout<< a[3]<<endl;
   return;

}else for(i=4;i<=n;i++){

   a[i]=a[i-3]+a[i-2]+a[i-1];

}

   cout<< a[n]<<endl;

}