// 台阶问题递归实现
int calStepMethods0(int n) {
if (n < 1) return 0;
if (n <= 2) return n;
return calStepMethods0(n-1) + calStepMethods0(n-2);
}
// 台阶问题非递归实现
int calStepMethods1(int n) {
if (n <= 0) return 0;
if (n <= 2) return n;
int prepreStep = 1;
int preStep = 2;
int i;
for (i=3; i<=n; ++i) {
int snap = prepreStep + preStep;
prepreStep = preStep;
preStep = snap;
}
return preStep;
}
int main() {
printf("0: %d\n", calStepMethods0(0));
printf("1: %d\n", calStepMethods0(1));
printf("2: %d\n", calStepMethods0(2));
printf("5: %d\n", calStepMethods0(5));
printf("10: %d\n", calStepMethods0(10));
printf("------\n");
printf("0: %d\n", calStepMethods1(0));
printf("1: %d\n", calStepMethods1(1));
printf("2: %d\n", calStepMethods1(2));
printf("5: %d\n", calStepMethods1(5));
printf("10: %d\n", calStepMethods1(10));
return 0;
}