我目前正在使用 PHP 工作,因此这个示例将使用 PHP,但问题适用于多种语言。
我正在和我的一个朋友一起做这个项目,和往常一样,我们遇到了一个大问题。现在我们俩都回家了,无法解决问题。那天晚上我们都找到了解决办法,只是我用了循环来解决问题,而他用了递归。
现在我想告诉他循环和递归之间的区别,但我无法想出一个在正常循环上需要递归的解决方案。
我将制作两者的简化版本,我希望有人能够解释其中一个与另一个的不同之处。
请原谅我的任何编码错误
循环:
printnumbers(1,10);
public function printnumbers($start,$stop)
{
for($i=$start;$i<=$stop;$i++)
{
echo $i;
}
}
现在上面的代码只是简单地打印出数字。
现在让我们用递归来做到这一点:
printnumbers(1,10);
public function printnumbers($start,$stop)
{
$i = $start;
if($i <= $stop)
{
echo $i;
printnumbers($start+1,$stop);
}
}
上面的方法将执行与循环完全相同的操作,但仅使用递归。
谁能向我解释一下使用其中一种方法有什么不同。
循环和递归在很多方面是等效的。没有程序需要其中之一,原则上你总是可以从循环转换为递归,反之亦然。
递归更强大,因为将递归转换为循环可能需要一个您必须自己操作的堆栈。 (尝试使用循环遍历二叉树,你会感到痛苦。)
另一方面,许多语言(和实现),例如 Java,没有正确实现尾递归。尾递归是指您在函数中做的最后一件事是调用自己(如您的示例中所示)。这种递归不必消耗任何堆栈,但在许多语言中它们会消耗任何堆栈,这意味着您不能总是使用递归。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)