算法练习——上台阶方案

计划了很久的东西终于要开始了,有哪些不足有望各位大佬指点迷津

题目:

一个十级台阶,你在第一级台阶,每次能往上走一级或者两级台阶,问走到第十级台阶有多少种方案?

分析:

  1. 10级楼梯,可以走N步,每前进一步都是一个子过程,用递归算法会比较简单;
  2. 递归出口为超出或者到达第10级楼梯;
  3. 递归入口就是两种不同尝试,尝试向前走一级或者两级。

C代码:

#include
//记录方案个数
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;
}

你可能感兴趣的:(算法练习——上台阶方案)