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

修复cpSeries函数无限循环问题:计算指定公式的数列第n项

问题分析与修复方案

原代码的核心问题

  1. 基准条件错误:在n==0和n==1的分支里,你写的是cpSeries(0) == 0和cpSeries(1) == 1,这是比较操作而非返回值,还会触发无意义的递归调用,直接导致无限递归。正确逻辑是直接返回对应初始值。
  2. 冗余的for循环:递归逻辑不需要这个循环,循环体里直接return,循环根本不会执行多次,完全是干扰代码。
  3. 递归重复计算:每次计算a(n)时两次调用cpSeries(n-1),会重复计算相同值,虽不影响正确性,但会降低效率。

修复后的代码

#include <stdio.h>

int cpSeries(int n)
{    
    // 基准条件:直接返回初始项
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    // 递归套用公式计算
    int prev1 = cpSeries(n-1);
    return prev1 * prev1 + cpSeries(n-2);
}

int main()
{
    int n=6;
    printf("The Nth term of the series is: %d", cpSeries(n));
}

补充说明

  • 这个数列增长极快,当n≥7时,计算结果会快速接近32位int的上限(2147483647),n=9时就会出现溢出。如果需要计算更大的n,可以把返回类型改为long long。
  • 若追求效率,可添加记忆化逻辑(用数组存储已计算的项,避免重复递归),但当前递归版本已满足“仅用函数实现”的要求。

内容的提问来源于stack exchange,提问作者Νικόλας Ορφανίδης

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:35:39