递归 尾递归

Here you will learn about what is tail recursion with example.

在这里,您将通过示例了解什么是尾递归。

Tail recursion refers to recursive call at last line. The tail recursive functions considered better as the recursive call is at the last statement so there is nothing left to do in the current function. It saves the current function’s stack frame is of no use.

尾递归是指最后一行的递归调用。 尾部递归函数被认为更好,因为递归调用位于最后一条语句中,因此当前函数中无事可做。 保存当前函数的堆栈框架是没有用的。

Tail recursion can be eliminated by changing the recursive call to a goto preceded by a set of assignments per function call. This simulates the recursive call because nothing needs to be saved after the recursive call finishes. We can just goto the top of the function with the values that would have been used in a recursive call.

通过将递归调用更改为goto,并在每个函数调用之前分配一组分配,可以消除尾递归。 这模拟了递归调用,因为在递归调用完成之后不需要保存任何内容。 我们可以使用递归调用中使用的值转到函数顶部。

Image Source图片来源

Tower of Honoi Problem is given below. It is an example of recursive function with tail recursion.了Honoi问题塔的递归函数。 这是带有尾递归的递归函数的示例。

带有尾递归的递归函数TOH (Recursive Function TOH with Tail Recursion)

void TOH(int n,char x,char y,char z)
{if(n>0){TOH(n-1,x,z,y);printf("\n%c-> %c",x,y);TOH(n-1,z,y,x);     //tail recursion}
}

没有尾递归 (Without Tail Recursion)

void TOH(int n,char x,char y,char z)
{char temp;label:if(n>0){TOH(n-1,x,z,y);printf("\n%c-> %c",x,y);temp=x;x=z;z=temp;n=n-1;goto label;}
}

翻译自: https://www.thecrazyprogrammer.com/2014/07/what-is-tail-recursion.html

递归 尾递归

递归 尾递归_什么是尾递归?相关推荐

  1. java递归优化_在Java中谈尾递归--尾递归和垃圾回收的比较

    我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所 ...

  2. python 递归 分叉_浅谈Python 递归算法指归

    1. 递归概述 递归( recursion)是一种编程技巧,某些情况下,甚至是无可替代的技巧.递归可以大幅简化代码,看起来非常简洁,但递归设计却非常抽象,不容易掌握.通常,我们都是自上而下的思考问题, ...

  3. python最大递归层次_练习题-Python的最大递归层数

    首先来看看python默认的最大递归层数: 运行环境:Windows 10,x64python环境:python3.5 得到的最大数为998,以后就是报错了:RecursionError: maxim ...

  4. 递归 尾递归_代码简报:递归,递归,递归

    递归 尾递归 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的故事: ...

  5. foreach jdk8 递归_[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .

    递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...

  6. 递归 尾递归_递归,递归,递归

    递归 尾递归 by Michael Olorunnisola 通过Michael Olorunnisola 递归,递归,递归 (Recursion, Recursion, Recursion) Bef ...

  7. java 递归 尾递归_递归和尾递归

    C允许一个函数调用其本身,这种调用过程被称作递归(recursion). 最简单的递归形式是把递归调用语句放在函数结尾即恰在return语句之前.这种形式被称作尾递归或者结尾递归,因为递归调用出现在函 ...

  8. java 递归 堆栈_尾递归函数仍在Java吹堆栈

    我试图实现一个尾部递归阶乘计算器,但我仍然得到一个堆栈溢出.有人能帮我找出原因吗?我读到Java 8支持尾调用优化,但我想我一定没有正确地实现它. 我读到过使用lambda表达式是可能的.我不能肯定我 ...

  9. c语言尾递归,漫谈递归:从汇编看尾递归的优化

    对于尾递归,很多人的理解仅局限于它是递归和尾调用的一个合体,比普通递归效率高.至于效率为什么高,高在哪,可能没有深究过. 尾调用 要说尾递归,得先说尾调用.我理解的尾调用大概是这么一种情况: 函数A里 ...

最新文章

  1. 理解LoadRunner中的局部变量和全局变量
  2. WPF MvvmLight简单实例(1) 页面导航
  3. Hdu 3062. Party
  4. word2vec词向量 文本分类实现(TensorFlow版,算法TextCNN)
  5. 再说409,又提离别痛
  6. Java 算法 复数求和
  7. 匹配滤波器的MATLAB实现
  8. 黑客攻防技术宝典浏览器实战篇
  9. 性能测试详解(三)Tomcat性能调优
  10. android开启wifi热点命令,Win7共享WIFI热点让Android手机上网
  11. 当“国风综艺”遇上“数字金融”,看国有大行解锁营销新范式
  12. 数字证书原理[转载]
  13. 汉罗塔小游戏(自创)
  14. 安装apk报错“解析包时出现问题”
  15. JIRA 从低版本升级到高版本(3.6.2-6.0.8)
  16. 计算一个有向图中出度为零和入度为零的顶点个数
  17. vos号码受限---都是前缀惹得祸
  18. 系统架构师论文-财务数据仓库系统的设计与实现
  19. 新闻编辑室第一季/全集The Newsroom迅雷下载
  20. F81E657Se-SL

热门文章

  1. SQL结构化查询语言
  2. 企业生产经营相关英文及缩写之(1)--供应链/物料控制
  3. 客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway
  4. Outlook Express错误代码表
  5. 【2021.01.04】事件
  6. 阿里云超算:高性能容器方案实战之Singularity
  7. Zxing和QR CODE 生成与解析二维码实例(带logo篇)
  8. 计算机动画制作试题,《Flash动画制作》模拟试题
  9. 改变自己—兄弟连IT教育
  10. JLINK的SW调试模式连线方式