递归实现序列第n项函数出错:输入n=4结果不符求排查
问题分析与修正
核心错误
你写的递归逻辑完全偏离了序列的递推规则:序列的第n项应该是前一项的3倍加1,即递推公式为 a(n) = 3 * a(n-1) + 1,但你的代码里错误地加入了无关常数和n的线性项,导致计算逻辑完全不符合规则。
错误代码的计算过程(以n=4为例)
我们一步步拆解错误代码的执行流程:
- 当
n=4时,代码返回4 + (3*3+1) + recursive_sequence(3)→4+10+recursive_sequence(3) - 计算
recursive_sequence(3):返回4 + (3*2+1) + recursive_sequence(2)→4+7+recursive_sequence(2) - 计算
recursive_sequence(2):返回4 + (3*1+1) + recursive_sequence(1)→4+4+1=9 - 回溯得到
recursive_sequence(3)=4+7+9=20,recursive_sequence(4)=4+10+20=34,这就是你得到错误结果的原因。
修正后的代码
int recursive_sequence(int n) { if (n == 1) { return 1; // 基准情况:第1项为1 } else { return 3 * recursive_sequence(n-1) + 1; // 递归情况:第n项 = 3*第n-1项 +1 } }
修正后代码的计算过程(以n=4为例)
recursive_sequence(4) = 3 * recursive_sequence(3) +1recursive_sequence(3) =3 * recursive_sequence(2)+1recursive_sequence(2)=3 * recursive_sequence(1)+1=3*1+1=4- 回溯得到
recursive_sequence(3)=3*4+1=13,recursive_sequence(4)=3*13+1=40,完全符合预期结果。
额外说明
你描述里提到“序列起始为数字4”,但例子中第1项是1、第2项是4,且代码基准情况是n=1返回1,这里以代码和例子的对应关系为准。如果实际需求是第1项为4,只需修改基准情况即可,递推逻辑保持不变:
int recursive_sequence(int n) { if (n == 1) { return 4; // 若第1项为4,修改基准情况 } else { return 3 * recursive_sequence(n-1) + 1; } }
内容的提问来源于stack exchange,提问作者user21082127
相关产品推荐
相关产品推荐

