修复cpSeries函数无限循环问题:计算指定公式的数列第n项
问题分析与修复方案
原代码的核心问题
- 基准条件错误:在
n==0和n==1的分支里,你写的是cpSeries(0) == 0和cpSeries(1) == 1,这是比较操作而非返回值,还会触发无意义的递归调用,直接导致无限递归。正确逻辑是直接返回对应初始值。 - 冗余的for循环:递归逻辑不需要这个循环,循环体里直接
return,循环根本不会执行多次,完全是干扰代码。 - 递归重复计算:每次计算
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,提问作者Νικόλας Ορφανίδης
相关产品推荐
相关产品推荐

