PHP实现奇数三角形第n行求和:代码报错求原因线索
PHP代码排障线索请求
问题背景
给定由连续奇数组成的三角形:
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 ...
需计算该三角形第n行(从索引1开始)的数字之和,示例:
1 --> 1 2 --> 3 + 5 = 8
我的实现代码
function rowSumOddNumbers($n) { if ($n==1){ return 1; } $licznik = 0; for ($i=$n; $i>0; $i--){ $licznik += $i; } $liczba = ($licznik*$n) - 1; $suma = 0; for ($i=$n; $i>0; $i--){ $suma += $liczba; $liczba = $liczba - 2; } return $suma; }
测试失败情况
Failed asserting that 15210 is identical to 2197.
排障线索
- 先手动计算
$licznik的取值:比如当n=3时,你的代码算出来的$licznik是多少?它是否等于前n-1行的数字总个数?这是定位起始数错误的关键。 - 验证
$liczba的推导公式:拿n=3来测试,代入公式算出的$liczba是不是第3行的最后一个数(11)?如果不是,说明公式逻辑错误。 - 观察测试用例的数值:2197是13³,而你的代码输出15210,这能侧面反映行和的规律,反过来检查你计算行内数字的起始/结束值是否正确。
- 手动跑一遍n=3的代码执行流程:记录每一步变量的取值,对比正确的行内数字(7、9、11),看哪一步的变量值偏离了预期。
内容的提问来源于stack exchange,提问作者Kacper Sulima
相关产品推荐
相关产品推荐

