寒假算法学习02

递归写爬楼梯

#include <stdio.h>

// 定义一个函数,用来打印每次爬的台阶数
void print_steps(int steps[], int n) {
    printf("一种可能的方法是:");
    for (int i = 0; i < n; i++) {
        printf("%d ", steps[i]);
    }
    printf("\n");
}

// 定义一个递归函数,用来求解所有可能的方法
void climb_stairs(int n, int steps[], int index) {
    // 如果只有一个或两个台阶,直接打印结果
    if (n == 1) {
        steps[index] = 1;
        print_steps(steps, index + 1);
    } else if (n == 2) {
        steps[index] = 1;
        print_steps(steps, index + 1);
        steps[index] = 2;
        print_steps(steps, index + 1);
    } else {
        // 如果有多于两个台阶,可以先爬一个或两个台阶,然后递归求解剩下的台阶
        steps[index] = 1;
        climb_stairs(n - 1, steps, index + 1);
        steps[index] = 2;
        climb_stairs(n - 2, steps, index + 1);
    }
}

int main() {
    int n; // 输入台阶数
    printf("请输入台阶数:");
    scanf("%d", &n);
    int steps[n]; // 定义一个数组,用来存储每次爬的台阶数
    climb_stairs(n, steps, 0); // 调用递归函数,求解所有可能的方法
    return 0;
}


posted @ 2024-01-23 20:52  aallofitisst  阅读(16)  评论(0)    收藏  举报