`
wudixiaotie
  • 浏览: 131908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

About Tail Recursion(关于尾递归)

 
阅读更多

为了锻炼英语水平,为以后出国工作提前准备,我就用英文写了,也没查字典,可能有语法错误,欢迎大家指正。。

When we have to recursion we always prefer to use loop rather than recursion. 

Because when the recursion goes deep the stack will always overflow. Its like a nightmare to us. Why stack always overflow? Look at the code below.

 

```erlang

normal(N) when N > 0 -> N + normal(N - 1);

normal(0) -> 0.

```

Every time before the recursion goes to the next level, the stack always have to save N and the ‘normal' function’s status. So if the recursion goes deeper it  will cost out the stack’s space.

 

But if we use tail recursion it will not happen again. Look at the code below.

 

```erlang

tail(N) -> tail(N, 0).

 

tail(N, Result) when N > 0 -> tail(N - 1, N + Result);

tail(0, Result) -> Result.

```

 

In tail recursion we don’t need to save any status in stack. Because all result is in the parameters of next recursion. So the stack can fix the size.

0
4
分享到:
评论

相关推荐

    关于尾递归的使用详解

    这几天看到几篇关于尾递归的文章,之前对尾递归没有多大概念,所以回头研究了一下尾递归。  尾递归的概念尾递归(Tail Recursion)的概念是递归概念的一个子集。对于普通的递归,由于必须要记住递归的调用堆栈,...

    前端大厂最新面试题-tail_recursion.docx

    前端大厂最新面试题-tail_recursion

    Python库 | tail_recursion-1.1.1-py3-none-any.whl

    python库。 资源全名:tail_recursion-1.1.1-py3-none-any.whl

    jvm-tail-recursion:Java字节码中的尾部递归调用的优化器库

    例子倒数至零一个简单的尾递归函数,倒数为零:前后static void count( int n) { if (n == 0 ) { return ; } count(n - 1 ); } static void count( int n) { while ( true ) { if (n == 0 ) { return ; } n = n - 1 ...

    csharp-trampolining-tail-call:C#实现Trampolin到尾递归

    csharp-trampolining-tail-call C#实现Trampolin到尾递归跳进去! 麻省理工学院

    windows下的tail备份

    tail for Windows 是 Windows 下的 tail DOS 命令(类似 UNIX/Linux 下的相同命令)。可用来显示文件尾部内容以及跟踪/监控文件内容变化。你也可以借助重定向符号(> 或 >>)从一个文件的指定行号开始截取内容生成另...

    tailcall:消除尾部递归函数调用

    例子输入(尾递归阶乘函数): function fact ( n , acc ) { acc = acc != null ? acc : 1 if ( n < 2 ) return 1 * acc return fact ( n - 1 , acc * n )} 输出(不再有递归的尾调用): function fact ( n , ...

    windows下使用tail命令-tail2win

    windows下使用tail命令-tail2win 下载之后解压到c:/windows/system32目录下 然后就可以像linux那样使用tail -f 指令

    win 平台类似linux的tail 工具

    win 平台类似linux的tail 工具

    windows的tail

    找过好几个windows的tail工具,都有很多问题,比如手动改写一下文件,就无法再监控等等。于是自己写了一个。 用法: 1. 将tail.exe放在特定的路径,然后把该路径加入到系统path中,之后就可以在控制台,像linux的...

    windows cmd tail 工具

    windows cmd tail 工具 以前在公司时服务器上面可以实现tail 命令查看程序运行日志,感觉相当不错,上网查了下这些命令是linux 下的,还好有好心人开发了一个可以在Windows下的运行的小工具,来给分享一下: 使用...

    Tail Animator.unitypackage

    Tail Animator is package of behaviors simulating elastic tail movement with procedural animation giving many new capabilities to you! This animator will add much more realism and smoothness to your ...

    windows tail加强版

    在原来基础上修改了下,以前用tail是只要我把文件的内容删除了一点,tail就会崩溃。读取2G以下的文件还是没有问题的。 新加的功能: 1.命令格式,默认是显示文件最后的10行,如果文件没有,则会创建 tail 文件路径 ...

    laravel-tail:用来拖尾应用程序日志的工匠命令

    composer require spatie/laravel-tail 您可以使用以下方法发布配置文件: php artisan vendor:publish --provider= " Spatie\Tail\TailServiceProvider " 这是将在config/tail.php发布的文件的内容: return [ ...

    文件实时监控工具Tail源码20130415

    文件实时监控工具Tail源码 功能介绍: Tail 是一种基于命令行的文件实时监控和查看器,是对 UNIX 'tail -f' 命令的Windows移植。Tail 可以快速显示大文件的末尾部分,而无需加载整个文件。并且其可以用于查看一个...

    tailcall:安全,零成本的尾部递归以稳定Rust

    将tailcall属性添加到要使用尾部递归的函数中: use tailcall :: tailcall; #[tailcall] fn gcd (a: u64 , b: u64 ) -> u64 { if b == 0 { a } else { gcd (b, a % b) } } 有关更多详细信息(包括一些限制)...

    WIndows版tail命令工具

    Linux有一个tail命令可以实时输出文本文件内容 而windows却没有类似的命令 这回用这个工具可以在windows里可以使用tail命令了 命令方法和Linux使用方法一样 方法:解压缩,把tail.exe放到c:\windows\system32\目录下,...

    File-Tail-0.99.3.tar.gz

    File-Tail-0.99.3.tar.gz File-Tail-0.99.3.tar.gz源码包

    Tail for Win32

    Tail for Win32 4.2.12.1,Linux下有一个tail程序,可以用来动态显示变化中的日志文件内容,这个是基于windows的版本,本身是来源于SourceForge的开源项目。 但是默认的版本有几个缺陷,因此我修改了以下功能: 1)...

Global site tag (gtag.js) - Google Analytics