如何用PHP实现两数区间所有整数累加的telOp函数
错误原因分析
你写的两段代码的问题分别如下:
- 第一段代码:没有定义累加变量存储求和结果,遍历到的数字全部直接通过echo输出,函数没有设置return返回值,因此调用
telOp得到的$resultaat为null,print不会输出求和结果。 - 第二段代码:循环内仍然只执行了echo输出数字的逻辑,没有做累加操作;循环结束时
$getal1已经自增到比$getal2大1,此时直接将两个值相加的结果完全不符合区间求和的逻辑,比如传入5和10时,循环结束后$getal1是11,相加得到的21是错误结果。
正确实现方案
方案1:保持while循环的写法(匹配你原来的编码习惯)
<?php function telOp($getal1, $getal2){ // 初始化累加变量 $sum = 0; // 使用临时变量遍历,不修改原始入参避免逻辑混淆 $current = $getal1; while ($current <= $getal2) { $sum += $current; // 将当前遍历值累加到求和变量中 $current++; } // 返回累加结果 return $sum; } // 测试用例 echo telOp(2, 5); // 输出14 echo telOp(1, 6); // 输出21 echo telOp(5, 10); // 输出45 ?>
方案2:等差数列公式实现(更高效,无需循环)
区间整数求和本质是首项为$getal1、末项为$getal2、项数为$getal2 - $getal1 + 1的等差数列求和,直接用公式计算即可,同时增加参数校验兼容第一个参数大于第二个参数的场景:
<?php function telOp($getal1, $getal2){ // 参数校验:自动调整大小顺序,避免传参顺序颠倒导致报错 if ($getal1 > $getal2) { list($getal1, $getal2) = [$getal2, $getal1]; } // 等差数列求和公式:(首项+末项)*项数/2 return ($getal1 + $getal2) * ($getal2 - $getal1 + 1) / 2; } ?>
新手学习建议
- 写函数前先明确输入输出:先理清楚函数需要接收什么参数、要返回什么结果,除非函数本身的功能就是打印内容,否则不要在函数内部随意加echo输出这类副作用操作。
- 变量作用要明确:需要存储中间结果就提前定义对应变量,尽量不要直接修改传入的原始参数,用临时变量做遍历、计算逻辑更清晰。
- 写完逻辑先做小范围测试:比如写好求和函数后先用你给出的两个示例
telOp(2,5)、telOp(1,6)做测试,验证结果符合预期再用到其他场景。 - 重点夯实基础语法:优先掌握变量定义、运算符、流程控制语句(while/for)、函数的返回值规则这些核心基础内容。
内容的提问来源于stack exchange,提问作者Cyten
相关产品推荐
相关产品推荐

