假设我有一个函数,它可以递归调用自己3次,例如:
function recursion($n=1){
if($n<3){
echo 1;
recursion($n+1);
}
echo 2;
}
它必须打印11222.但是我可以在最后一次迭代中做一些事情以防止以前的迭代,得到11吗?我正在寻找任何解决方案。
答案 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;
}
}