You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:54