酷代码 AI
菜单
全部AI  /  热门  /  AI问答
服务商

楼梯有 n 级台阶,每一步可以跨越 1 ~ 3 级台阶。请问一共有多少种上法。 函数原型 double Climb(int step); 说明:参数 step 为台阶数。函数值为爬楼梯的方法总数。 裁判程序 #include <stdio.h> double Climb(int step); int main() { int n; scanf("%d", &n); printf("%g\n", Climb(n)); return 0; } /* 你提交的代码将被嵌在这里 */ 要求:用递归方法完成函数的设计,不得使用循环语句。 输入样例1 15 输出样例1 5768

这个问题可以通过递归来解决。每次可以选择跨1、2或3级台阶,因此对于n级台阶,上法总数等于前三级台阶上法总数的和。递归的终止条件是当台阶数小于等于3时直接返回对应的值。 以下是实现这个递归函数的代码: ```c double Climb(int step) { if (step <= 0) { return 0; } if (step == 1) { return 1; } if (step == 2) { return 2; } if (step == 3) { return 4; } return Climb(step - 1) + Climb(step - 2) + Climb(step - 3); } ``` 代码解释: 1. 终止条件: - 如果 `step` 小于等于0,返回0(无效输入)。 - 如果 `step` 等于1,只有1种上法(跨1级)。 - 如果 `step` 等于2,有2种上法(1+1或直接跨2级)。 - 如果 `step` 等于3,有4种上法(1+1+1, 1+2, 2+1, 直接跨3级)。 2. 递归调用: - 对于 `step > 3`,上法总数等于前三级台阶上法总数的和,即 `Climb(step - 1) + Climb(step - 2) + Climb(step - 3)`。 示例验证: - 输入 `15`,输出 `5768`,与题目要求一致。 这种方法虽然直观,但递归调用会导致重复计算,效率较低。对于较大的 `step`,建议使用动态规划优化。 [2025-05-18 11:29:47 | AI问答 | 385点数解答]

相关提问