题目描述:有n个台阶,每次最多可以下m个,求一共有多少种下楼梯的策略。
下面是源代码
#include <stdio.h>
#include <stdlib.h>
int Stair(int h,int s){
int ans,tol=0;
for(int i=1;i<=s&&i<=h;i++){
if(h-i==0) tol+=1;
else tol+=Stair(h-i,s);
}
ans=tol;
return (ans);
}
int main (void){
int s,h,ans;
scanf("%d%d",&h,&s);
ans=Stair(h,s);
printf("%d\n",ans );
system("pause");
return 0;
}
分析显然用递归函数来模拟所有下楼梯的可能情形。
若第一次下1个台阶,则求n-1个台阶的策略
若第一次下2个,则求n-2个台阶的策略
以此类推
每次下楼梯的策略总数为:
for(int i=1;i<=m&&i<=n;i++){
if(h-i==0) tol+=1;
else tol+=Stair(h-i,s);
}
即下完i个台阶的剩下台阶策略的和(显然i不能超过m和n的任何一个)
因为m是待定的,所以不能直接通过明确的表达式写出函数的递归形式,需要借助一个辅助变量tol保存下一层的和,再传递给递归的结果ans