C语言递归实现连分式计算遇问题,请求调试帮助
修复C语言递归实现连分式的错误
错误分析
原递归函数的核心逻辑完全不符合连分式的结构。连分式的定义是 a₀ + 1/(a₁ + 1/(a₂ + ... + 1/aₙ₋₁)...),但原代码的递归表达式 1.0 / (calculateExpression(arr, start, end - 1) + 1.0 / calculateExpression(arr, end, end)) 颠倒了运算顺序,错误地将每一层计算为倒数形式,仅在极少数测试用例中巧合得到正确结果。
正确递归思路
连分式的递归构建应遵循从左到右的层级关系:
- 终止条件:当
start == end时,直接返回当前元素arr[start](对应最内层的分式项)。 - 递归步骤:当前项的结果为
arr[start] + 1.0 / 递归计算start+1到end的连分式,这完全匹配连分式「当前项加上1除以后面所有项组成的子连分式」的结构。
修正后的代码
#include <stdio.h> float calculateExpression(int arr[], int start, int end) { if (start == end) return arr[start]; return arr[start] + 1.0 / calculateExpression(arr, start + 1, end); } int main() { int n; scanf("%d", &n); int arr[n]; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } float result = calculateExpression(arr, 0, n - 1); printf("%f\n", result); return 0; }
测试验证
- 输入
4 3 0 3 2:正确结果为6.5,代码输出6.500000。 - 输入
2 1 1:正确结果为2.0,代码输出2.000000。 - 输入
3 0 3 2:正确结果约为0.285714,代码输出0.285714。
内容的提问来源于stack exchange,提问作者Kratos1919
相关产品推荐
相关产品推荐

