阶乘代码异常:数值>20触发越界提示,<-1无提示问题排查
PHP阶乘代码越界判断问题修复
你的代码核心问题是越界判断逻辑被放在了for循环内部:
- 当输入数值小于-1时,for循环的初始条件
$i = $number; $i > 0不成立,循环直接跳过,内部的if判断根本不会执行,所以不会触发"out of range"提示,反而会直接执行最后的echo语句。 - 只有当输入数值在1-20之间时,循环才会执行,但此时数值本身合法,判断逻辑也不会生效。
正确的做法是把合法性校验移到循环之前,确保所有不符合要求的输入(大于20或小于0)都能被提前拦截:
<?php $number = -1; $factorial = 1; // 先做合法性校验,放在循环执行前 if ($number > 20 || $number < 0) { exit('out of range'); } // 仅当数值合法时,执行阶乘计算 for ($i = $number; $i > 0; $i--) { $factorial = $factorial * $i; } echo "the factorial of $number is: " . $factorial;
补充说明:根据阶乘定义,0的阶乘结果为1,上述代码保留了对0的支持——若输入0,循环不会执行,$factorial保持初始值1,输出结果符合数学定义。如果需要完全禁止0的输入,只需把判断条件改成$number > 20 || $number <= 0即可。
内容的提问来源于stack exchange,提问作者Ahmed Elsebaii Ahmed
相关产品推荐
相关产品推荐

