这个问题可以通过递归来解决。每次可以选择跨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点数解答]