Java递归类型

示例

可以将递归分为“头递归”或“尾递归”,具体取决于递归方法调用的放置位置。

head递归中,递归调用在发生时先于函数中的其他处理(考虑它发生在函数的顶部或头部)。

尾部递归中,情况恰恰相反—处理发生在递归调用之前。在这两种递归样式之间进行选择似乎是任意的,但是选择可以使一切有所不同。

在路径的开头具有单个递归调用的路径的函数使用所谓的头递归。先前展览的阶乘功能使用头部递归。一旦确定需要递归,它所做的第一件事就是使用递减的参数进行调用。在路径末尾具有单个递归调用的函数正在使用尾递归。

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);
}                                        }

如果递归调用发生在方法的末尾,则称为尾部递归。尾部递归类似于循环。该方法在跳转到下一个递归调用之前执行所有语句。

如果递归调用发生在方法的开头,则称为头递归。该方法在跳转到下一个递归调用之前保存状态。