php - 递归无限循环?

标签 php recursion pass-by-reference pass-by-value

所以我遇到了一个问题,我想出了如何解决,但我很好奇为什么。所以这是一段代码

<?php

function test($attempt=1){
    if ($attempt == 5){
        echo "Done!";    
    }else{
        echo 'recursion!';
        test($attempt++);
    }

}
$test = test();

现在这段代码应该第一次运行,检查,进入else语句,然后再次运行测试,但这次使用$attempt++,直到最终==到5,然后它将回显完成并完成。然而这不起作用并且它永远循环。但是,可以通过在进入函数后立即将变量分配给另一个变量来修复它,如下所示

<?php

function test($attempt=1){
    $nextAttempt = $attempt+1;
    if ($attempt == 5){
        echo "Done!";    
    }else{
        echo 'recursion!';
        test($nextAttempt);
    }

}
$test = test();

有什么想法可以解释这是为什么吗?

最佳答案

您想要变量的预增量而不是后增量。这将在将变量 $attempt 作为参数传递给函数之前而不是之后增加它。

所以基本上你需要 test(++$attempt); 而不是 test($attempt++);

带有工作示例的沙箱:http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696

关于php - 递归无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666985/

相关文章:

PHP/MySQL 更新代码

python - 康托集代码没有给出预期的输出

javascript - jQuery递归

c++ - 为什么即使参数标记为 'const' 也会调用复制构造函数?

javascript - 在 Javascript 中交换整个数组

javascript - 错误请求 :Error function and timeout in ajax never fired

php - 使用 hash_hmac 在 php 中保护密码

php - 如何通过带有嵌套集模型的 php <ul> <li> 标签自动创建菜单

java - 设计递归时遇到问题,结果有限

java - Java 是 "pass-by-reference"还是 "pass-by-value"?