php递归错误分解

jkd*_*dba 0 php recursion factoring

所以我对递归的想法是新的,我写了这个简单的代码来计算一个数字($ n)这是代码:

$n = 120;
$y = 1;

function factor($n, $y) {
    if($y > $n) {
        return 1;
    } else {
        $x = $n / $y;
        list($whole, $dec) = array_pad(explode('.', $x), 2, Null);
        if($dec == '') {
            echo 'x:' . $x . ' y:' . $y . '</br>';
            return factor($n, ($y + 1));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是代码输出的内容:

x:120 y:1
x:60 y:2
x:40 y:3
x:30 y:4
x:24 y:5
x:20 y:6
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么它会在它完成之前停止?

ccK*_*Kep 5

你的下一步将是120/7,相当于17.142857 ....

所以这个检查失败了,因此递归不会发生:

if($dec=='') // $dec would equal to 142857.....
{
    echo'x:'.$x.' y:'.$y.'</br>';
    return factor($n,($y+1));
}
Run Code Online (Sandbox Code Playgroud)