算法练习——上台阶方案
2017-06-27 本文已影响112人
之安z
计划了很久的东西终于要开始了,有哪些不足有望各位大佬指点迷津
题目:
一个十级台阶,你在第一级台阶,每次能往上走一级或者两级台阶,问走到第十级台阶有多少种方案?
分析:
- 10级楼梯,可以走N步,每前进一步都是一个子过程,用递归算法会比较简单;
- 递归出口为超出或者到达第10级楼梯;
- 递归入口就是两种不同尝试,尝试向前走一级或者两级。
C代码:
#include<stdio.h>
//记录方案个数
int count;
//记录到第几步
int loc;
//记录每一步走的是哪一级
int book[10];
//打印所有步级
void print() {
int i=0;
for (i=0; i<=loc; i++) {
printf("%02d ", book[i]);
}
printf("\n");
}
//递归遍历每一步的情况
void steps(int step) {
//当跨越第10级不计数
if (step > 10) {
return;
}
//刚好到达第10级
if (step == 10) {
book[loc] = 10;
print();
count++;
return;
}
//这一步有效,赋值给记录数组,并loc+1代表前进一步
book[loc] = step;
loc++;
//尝试只上一级台阶
steps(step + 1);
//尝试上两级台阶
steps(step + 2);
//尝试结束回退上一步
loc--;
}
int main() {
int i;
for (i = 0; i<10; i++) {
book[i] = 0;
}
loc = 0;
count = 0;
steps(1);
printf("\nHere are %d ways to get to the top!\n", count);
return 0;
}