[Java8](8)Lambda表达式对递归的优化(上)-使用尾递归..pdfVIP

  • 1
  • 0
  • 约5.32千字
  • 约 3页
  • 2023-12-08 发布于中国
  • 举报

[Java8](8)Lambda表达式对递归的优化(上)-使用尾递归..pdf

[Java8](8)Lambda表达式对递归的优化(上)-使⽤尾递归.

递归优化

很多算法都依赖于递归,典型的⽐如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较⼤的问题时,常常会出现

StackOverflowError。处理这个问题,我们可以使⽤⼀种叫做尾调⽤(Tail-CallOptimization)的技术来对递归进⾏优化。同时,还可以通过暂

存⼦问题的结果来避免对⼦问题的重复求解,这个优化⽅法叫做备忘录(Memoization)。

本⽂⾸先对尾递归进⾏介绍,下⼀票⽂章中会对备忘录模式进⾏介绍。

使⽤尾调⽤优化

当递归算法应⽤于⼤规模的问题时,容易出现StackOverflowError,这是因为需要求解的⼦问题过多,递归嵌套层次过深。这时,可以采⽤

尾调⽤优化来避免这⼀问题。该技术之所以被称为尾调⽤,是因为在⼀个递归⽅法中,最后⼀个语句才是递归调⽤。这⼀点和常规的递归⽅

法不同,常规的递归通常发⽣在⽅法的中部,在递归结束返回了结果后,往往还会对该结果进⾏某种处理。

Java在编译器级别并不⽀持尾递归技术。但是我们可以借助Lambda表达式来实现它。下⾯我们会通过在阶乘算法中应⽤这⼀技术来实现递

归的优化。以下代码是没有优化过的阶乘递归算法:

publicclassFactorial{

文档评论(0)

1亿VIP精品文档

相关文档