什么是尾部递归?(a tail recursion?)

尾部递归是一种编程方法调用,其中一个方法调用自身,然后立即返回第二个调用的值。换句话说,当方法中的最终语句是对同一方法的另一个调用时,就会发生尾部递归。第二个方法调用中的参数通常与第一个方法调用中的参数不同,但这不是必需的。为了使该递归工作,在其内部调用的方法必须返回具体的值,例如数字、字符串或其他对象。Void方法不返回值,不适合递归。...

尾部递归是一种编程方法调用,其中一个方法调用自身,然后立即返回第二个调用的值。换句话说,当方法中的最终语句是对同一方法的另一个调用时,就会发生尾部递归。第二个方法调用中的参数通常与第一个方法调用中的参数不同,但这不是必需的。为了使该递归工作,在其内部调用的方法必须返回具体的值,例如数字、字符串或其他对象。Void方法不返回值,不适合递归。

Tail recursion exists in many computer languages, including C++.

递归调用必须是其调用方法中的最后一条语句的要求并不一定意味着递归调用是方法中的最后一行。在控制结构中也可以找到适当的尾部递归调用,这意味着在源代码中,控制结构可以结束方法而不是调用。这种情况下的重要区别在于,控制结构不是编程语句,而是计算机语言的内置部分。

许多计算机语言中包括了java和C++的尾部递归。通常,可以使用其他方法重写这些递归调用,例如for循环、while循环或goto语句。当创建对同一方法的多个连续调用时,可以发现递归的效用。递归通常是完成重复任务的最干净、最简单的方法。

尾部递归的一个常见示例是计算数字阶乘的方法。这个过程是理想的,因为从任何数字开始,每个数字在相乘之前都是相乘的。所以,要找到5的阶乘,正确的方法是乘以5*4*3*2*1。递归的出现是因为factorial方法是如何构造的:如果factorial是1,则返回1,否则返回给该方法的数字的factorial减去1。这个方法也很有用,因为它可以使用任意一种尾部递归等价地编写,在最后的方法调用中使用或不使用控制语句。

尾部递归只是多种递归类型的一个示例。所有递归类型中的概念本质上都是相同的,即方法以某种方式调用自身。在这些类型中,尾部递归的区别在于,递归调用的值会立即返回,而在该调用之后调用方法中不会发生其他任何事情。

  • 发表于 2021-12-12 14:08
  • 阅读 ( 278 )
  • 分类:互联网

你可能感兴趣的文章

递归(recursion)和迭代(iteration)的区别

...建软件应用程序的主要技术。 目录 1. 概述和主要区别 2. 什么是递归 3. 什么是迭代 4. 递归与迭代的相似性 5. 并排比较-递归与表格形式的迭代 6. 摘要 什么是递归(recursion)? 当函数在函数内调用自身时,称为递归。递归有两种类...

  • 发布于 2020-10-19 23:58
  • 阅读 ( 281 )

什么是递归?如何使用它?

... 什么是递归函数(a recursive function)? ...

  • 发布于 2021-03-29 05:32
  • 阅读 ( 230 )

如何在linux上使用tail命令

...这是否意味着tail命令是寻找问题的解决方案呢?它还有什么可以提供的吗? tail命令不仅仅是实时显示更新。对于这一点,仍然有大量的日志文件不是系统生成的,仍然是作为纯文本文件创建的。例如,应用程序生成的日志文件...

  • 发布于 2021-04-02 17:32
  • 阅读 ( 183 )

双尾检验

什么是双尾检验(a two-tailed test)? 在统计学中,双尾检验是一种方法,在这种方法中,分布的临界面积是双边的,检验一个样本是否大于或小于某一范围的值。它用于零假设检验和统计显著性检验。如果被测试的样本落入任何一...

  • 发布于 2021-05-31 08:55
  • 阅读 ( 412 )

鼻子(nose)和滑板尾部(tail of a skateboard)的区别

...脚。所以鼻子应该更大,以便更好地抓住你的脚。滑板的尾部较小,稍微靠近地面,以便有更好的弹出效果和更快的响应。当你用滑板的大头作为尾巴的时候,实际上更难滑冰。 对于一些滑板来说,尾巴更陡、更长、更宽,而...

  • 发布于 2021-06-23 15:59
  • 阅读 ( 305 )

权威(authoritative)和递归dns(recursive dns)的区别

...组织运行自己的公共递归DNS服务器。 覆盖的关键领域 1.什么是DNS–定义,功能2.什么是权威DNS服务器–定义,功能3.什么是递归DNS服务器–定义,功能4.权威DNS和递归DNS之间的区别是什么–主要区别的比较 关键术语 权威DNS,DNS,...

  • 发布于 2021-07-01 03:14
  • 阅读 ( 808 )

递归(recursion)和环(loop)的区别

...术都有助于开发小型到复杂的程序。 覆盖的关键领域 1.什么是递归-定义,功能2.什么是循环-定义,功能3.递归和循环的区别是什么-关键区别的比较 关键术语 执行While循环,For循环,循环,递归,While循环 什么是递归(recursion)?...

  • 发布于 2021-07-01 05:19
  • 阅读 ( 293 )

递归下降分析(recursive descent parsing)和预测分析(predictive parsing)的区别

...解析树,并逐步向下移动到叶节点。 覆盖的关键领域 1.什么是递归下降分析-定义,功能2.什么是预测分析-定义,功能3.下降分析和预测分析之间的关系是什么-关联概述4.下降分析和预测分析之间的区别是什么-关键区别的比较 关...

  • 发布于 2021-07-01 10:23
  • 阅读 ( 776 )

递归的(recursive)和明确的(explicit)的区别

...描述了在序列中找到任何项的方法。 覆盖的关键领域 1.什么是递归-定义,功能2.什么是显式-定义,功能3.递归和显式的区别-关键区别的比较 关键术语 显式公式,递归公式 什么是递归的(recursive)? 在递推公式中,我们可以根据...

  • 发布于 2021-07-01 15:01
  • 阅读 ( 793 )

递归(recursion)和迭代(iteration)的区别

关键区别:在编程中,递归可以通过考虑递归函数来解释。递归函数是再次调用自身以重复代码的函数。另一方面,迭代是通过一个迭代函数来实现的,该函数循环重复代码的某一部分。 在编程中,递归和迭代都用来实现重复...

  • 发布于 2021-07-13 20:56
  • 阅读 ( 449 )