小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
解答:
/有左右脚的限制,即第一步必须左脚,然后左右交替,最后一步必须是右脚。即必须走偶数步。
#include<iostream.h> //有左右脚的限制。
const int N=39;
int f(int m,int n)
{ if(m==0||n==0)
return 1;
return(f(m-1,n)+f(m,n-1));//递归的关键在此,大规模逐渐转化为小规模。
}
int main()
{ int x=N/2,y; //x表示走两步的次数,y表示走一步的次数。
int i,sum=0;
for(i=x;x>=0;x-=2) //为了保持偶数步,必须x每次递减2,而不是1;(x要x>=0,不能x>0),x=0是针对偶数台阶。
{ y=N-2*x;
sum+=f(x,y); //求组合数;
}
cout<<"共有 "<<sum<<"种走法。"<<endl; return 0;
}
//51167078种走法。