如何最好地停止PHP递归?

时间:2017-12-22 10:49:28

标签: php recursion

假设我有一个函数,它可以递归调用自己3次,例如:

function recursion($n=1){
   if($n<3){
     echo 1;
       recursion($n+1);
   }
    echo 2; 
}

它必须打印11222.但是我可以在最后一次迭代中做一些事情以防止以前的迭代,得到11吗?我正在寻找任何解决方案。

1 个答案:

答案 0 :(得分:1)

您的代码行为不当的原因是您的recursing()功能存在缺陷。

无论何时调用函数,它都会被放置在堆栈中。当函数完成时,它会从堆栈中弹出并返回给调用者。

在您的示例中,recursion()会检查是否n < 3,然后打印“1”并使用recursion()调用n+1。但是,功能并不止于此。它还在运行!

使用recursion()调用n = 3后,指令指针返回上一次调用recursion()的位置,然后继续。你告诉它继续做什么?那么,打印“2”当然。

解决方案

function recursion($n=1){
    if($n<3){
        echo 1;
        recursion($n+1);
    }
    else {
        echo 2;
    }
}