提示:设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;
}