2019独角兽企业重金招聘Python工程师标准>>>

Typical Recursion Example (hanoi problem)

public void move(int n, String strFrom, String strTemp, String strTo) {if (n == 1) {show(1, strFrom, strTo);} else {move(n - 1, strFrom, strTo, strTemp);move(n - 1, strTemp, strFrom, strTo);}}

Then I come cross the term recursion and tail recursion in Erlang.

%% recursion
sum([H|T]) ->H + sum(T);
sum([]) ->0.
%% tail recurion
sum(X) ->sum(X, 0).
sum([H|T], Acc) ->sum(T, H + Acc);
sum([], Acc) ->Acc.

What is A Tail Call?

A tail call is a fancy term that refers to a situation in which a method or function call is the last instruction inside of another method or function.

Recursion Code with Java.

     /*** sum from 1 to n. recursion* @param i* @return sum */public int recur_head(int i){if(i==1)return 1;elsereturn i+recur_head(i-1);}

Tail Recursion Code with Java.

    /**** sum from 1 to n. tail recursion* @param i* @param total* @return*/public int recur_tail(int i, int total){if (i == 1)return 1+total;return recur_tail(i-1, total +i);}

See the class with

 javap -c
public class Recur {public Recur();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic int recur_head(int);Code:0: iload_11: iconst_12: if_icmpne     75: iconst_16: ireturn7: iload_18: aload_09: iload_110: iconst_111: isub12: invokevirtual #2                  // Method recur_head:(I)I15: iadd16: ireturnpublic int recur_tail(int, int);Code:0: iload_11: iconst_12: if_icmpne     95: iload_26: iconst_17: iadd8: ireturn9: aload_010: iload_111: iconst_112: isub13: iload_214: iload_115: iadd16: invokevirtual #3                  // Method recur_tail:(II)I19: ireturn
}

for Java Developer

Java programmers tend to avoid recursion through the use of loops.

int factorial(int n) {int result = 1;for (int t=n; t > 1; t--)result *= t;return result;}

Reference

http://www.drdobbs.com/jvm/tail-call-optimization-and-java/240167044

转载于:https://my.oschina.net/u/1767744/blog/305910

Recursion and Tail Recursion in Java and Erlang相关推荐

  1. JavaScript, ABAP和Scala里的尾递归(Tail Recursion)

    这是Jerry 2021年的第 12 篇文章,也是汪子熙公众号总共第 283 篇原创文章. 今天是2021年1月20日,看看历史上的今天都发生了什么. 2004年1月20日,第一个公开版本的Scala ...

  2. Tail Recursion尾递归

    什么是尾递归 Tail Recursion /teɪl rɪˈkɜːrʒn/ In traditional recursion, the typical model is that you perfo ...

  3. php recursion,PHP与Recursion 学习笔记

    在程序设计中,递归(Recursion)是一个很常见的概念,合理使用递归,可以提升代码的可读性,但同时也可能会带来一些问题. 下面以阶乘(Factorial)为例来说明一下递归的用法,实现语言是PHP ...

  4. 使用java进行erlang字符解析

    与公司后端对接的时候erlang工程师经常丢过来这样一串字符串 {{1,7,[1,[2,3]]},3}" 或是这样一串 [{1,7,[1,[2,3]]},3]" 有点类似json又 ...

  5. Erlang转JAVA,将Erlang UTF-8编码的字符串转换为java.lang.String

    Java节点接收以UTF-8编码的Erlang字符串.它的类类型是OtpErlangString.如果我只是执行.toString()或.stringValue(),则生成的java.lang.Str ...

  6. 如何用堆栈和循环结构代替递归调用--递归转换为非递归的10条军规

    10 Rules (steps) for replacing the recursive function with stack and while-loop 转自http://www.codepro ...

  7. java erlang_Java开发人员的Erlang

    java erlang 您可能没有注意到,但是距离我上次发布博客已经过去了几个星期. 这是由于我的Soleus骨折了,而且我的腿是石膏模型. 不能动弹,我认为调查完全不同的东西是个好主意–要么看那一天 ...

  8. Java开发人员的Erlang

    您可能没有注意到,但是距离我上次发布博客已经过去了几个星期. 原因是我的Soleus骨折了,而我的腿也石膏了. 不能动弹,我认为调查完全不同的东西是个好主意–要么看那天的电视,要么,尽管Kojak和M ...

  9. java中将字符串顺序反传转_如何在Java中将字符串序列化的Erlang术语反序列化为JInterface对象?...

    我的接口系统提供了来自Erlang世界的结果,该结果发送了erlang术语的字符串表示形式,例如元组列表: [ {"key1" , ["AAA","B ...

最新文章

  1. python 提交form-data之坑
  2. AzureDirectory Library for Lucene.Net
  3. yolov5 代码版,去掉配置文件
  4. 经典Golang语法50问!
  5. getpeername函数与getsockname函数的介绍
  6. 监控工具—Prometheus—监控Redis
  7. ibatis(0)ibatis 与 mybatis 简述
  8. ROS系统玩转自主移动机器人(3)-- 开源机器人结构介绍
  9. 再也回不去的 GitHub。。。
  10. Linux内核部件分析 设备驱动模型之bus
  11. 微信小程序 this.data与this.setData
  12. 金鳞岂是池中物IT评论博客正式成立
  13. 【RocketMQ】发送事务消息
  14. 海康摄像头之FTP服务器搭建及使用
  15. 收敛交叉映射(convergent cross mapping,CCM)滥觞、2012年Science论文引言部分:Detecting Causality in Complex Ecosystems
  16. terminus 和 windows terminal_Windows命令行终端神器Cmder配置及美化指南
  17. 针对电动车组线路布置与检测的线缆测试仪方案
  18. 在安卓手机上搭建一台微型服务器
  19. Unity视频播放的脚本控制
  20. 家用计算机硬件升级方案,旧电脑如何升级提速,老电脑升级方案!

热门文章

  1. PyQt4日历部件QXalendarWidget
  2. sqlserver触发器如何将一个库中的数据插入到另外一个库中
  3. 用Winhex手工定位NTFS文件系统下的文件
  4. 客户端访问Web Service--参数类型的序列化与反序列化(一)
  5. 用户 sa 登录失败。_Sqlserver2008R2特定用户只能查看管理指定的数据库
  6. 微信公众帐号开发教程第11篇-符号表情的发送(上)
  7. Drawable和Bitmap的区别
  8. 菜鸟的学习之路(6) — 设计模式之单例模式(Singleton)
  9. android单选控件spinner与数据库结合综合实例
  10. Vuejs --01 起步