樓梯有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;
}