头尾递归的区别
这个问题在这里已经有了答案:
在head recursion
,当递归调用发生时,会在函数的其他处理(认为它发生在函数的顶部或头部)之前出现。
在tail recursion
,它的递归调用之前发生的相反的处理。 在两种递归风格之间进行选择可能看起来是任意的,但是选择可以使所有不同。
在路径开始处有一个具有单个递归调用路径的函数使用所谓的头递归。 先前展览的阶乘函数使用头部递归。 一旦它确定需要递归,它所做的第一件事就是用递减参数调用它自己。 在路径末尾使用单个递归调用的函数使用尾递归。 请参阅这篇文章
示例递归:
public void tail(int n) public void head(int n)
{ {
if(n == 1) if(n == 0)
return; return;
else else
System.out.println(n); head(n-1);
tail(n-1); System.out.println(n);
} }
如果递归调用发生在方法的末尾,则称为tail recursion
。 尾递归similar to a loop
。 该method executes all the statements before jumping into the next recursive call
。
如果递归调用发生在beginning of a method, it is called a head recursion
的beginning of a method, it is called a head recursion
。 该method saves the state before jumping into the next recursive call
。