楼上走到楼下共有n个台阶,每一步有三种走法,走1个台阶,走2个台阶,走3个台阶。问可走出多少种方案?希望用递归思想来编程。 首先定义: (1)Try(i,s)为站在第i级台阶上往下试走第s步的过程; (2)j为在每一步可以试着走的台阶数,j=1, 2.3; (3)take[s]为存储第s步走过的台阶数。 如果i<j,说明第i级台阶已比要走的j级台阶小,j不可取。 如果i>j ,说明站在第i级台阶上可试走j个台阶为一步。 如果i==j,说明这一步走完后已到了楼下,这时一条下楼方案已试成,即可输出这方案,用c语言表达
时间: 2024-02-20 13:59:48 浏览: 25
以下是使用递归思想解决该问题的C语言代码:
```c
#include <stdio.h>
void Try(int i, int s, int n, int take[]) {
int j;
if (i < s) return; // 台阶不够,返回
if (i == n) { // 到达楼下,输出结果
printf("方案:");
for (int k = 1; k < s; k++) {
printf("%d ", take[k]);
}
printf("\n");
return;
}
for (j = 1; j <= 3; j++) { // 枚举每一步可走的台阶数
take[s] = j; // 存储第s步走过的台阶数
Try(i - j, s + 1, n, take); // 递归试探下一步
}
}
int main() {
int n;
printf("请输入楼梯数:");
scanf("%d", &n);
int take[n + 1]; // 存储每一步走过的台阶数
Try(n, 1, n, take);
return 0;
}
```
在程序中,Try函数表示在第i级台阶上往下试走第s步的过程。当i小于s时,说明台阶不够,返回;当i等于n时,说明已到达楼下,输出结果;否则,枚举每一步可走的台阶数,存储第s步走过的台阶数,并递归试探下一步。主函数中,首先输入楼梯数,然后定义存储每一步走过的台阶数的数组take,最后调用Try函数开始试探。