Erlang函数递归调用模式
来源:互联网 发布:软件系统测试目的 编辑:程序博客网 时间:2024/05/18 03:27
在Erlang语言中,为了提高运行效率,少占用系统资源,在编写递归调用的函数中,主要分为两类:非尾递归和尾递归。
尾递归是指在递归函数的内部进行递归调用时,在递归调用之后函数就结束了。以下以两个简单的例子作为说明:
1.使用非尾递归编写求0-X的数值之和
sum(0) -> 0;sum(X) -> sum(X-1) + X.
当传入3时,递归调用流程如下:sum(3-1) + 3
sum(2-1) + 2
sum(1-1) +1
sum(0)
每一步调用,则深入一层,直至调用sum(0)返回0,最后才能计算出结果6。
2.使用尾递归编写求0-X的数值之和
使用尾递归编写求0-X的数值之和定义的函数如下:
sum(X) -> sum(X,0).sum(0,S) -> S;sum(X,S) -> sum(X-1,S+X).
以上实际定义了两个函数。虽然它们的名字都是sum,但其参数的个数不同,在Erlang中视为“同名不同目”的函数,是完全不同的两个函数。当调用sum(3)时,会转到调用函数sum(3,0),此时第二个函数会得到执行。
第一次执行之后会调用sum(3-1,0+3),即sum(2,3);
第二次执行之后会调用sum(2-1,3+2),即sum(1,5);
第三次执行之后会调用sum(1-1,5+1),即sum(0,6);
第四次执行之后直接返回了6,即为正确的结果。
阅读全文
0 0
- Erlang函数递归调用模式
- 浅谈Erlang中最常用的编程模式--递归调用
- 浅谈Erlang中最常用的编程模式--尾递归调用
- 递归函数调用递归函数
- Erlang函数与模式匹配
- Erlang高阶函数——递归
- erlang递归
- 函数的递归调用
- 函数递归调用
- 函数递归调用
- 函数递归调用问题
- 函数递归调用详解
- 函数递归调用
- 函数的递归调用
- 函数调用与递归
- 函数的递归调用
- 函数调用--递归
- 函数的递归调用
- PG重建索引
- [3].Spark 学习笔记 使用java ---explode
- Unity 、Eclipse Android平台、接入支付宝SDK
- redis(13)——哨兵原理
- Elasticsearch学习笔记(一)Elasticsearch安装
- Erlang函数递归调用模式
- 说说如何实现高可用的网站架构
- 模式开始-第二天
- angular ui-router,最适合的angular1的路由开发
- 01-什么是栅格数据
- Mybatis-Generator自动生成代码
- Spring Cloud Eureka emergency提示信息
- winscp 服务器拒绝了SFTP连接,但它监听FTP连接
- 将cmd中命令输出保存为TXT文本文件