编辑代码

#include <stdio.h>

// 台阶问题递归实现
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;
}