erlang尾递归练习
1 %%计算链表长度尾递归实现
2 lez(N) -> lez(N, 0).
3
4 lez([], Acc) -> Acc;
5 lez([_ | T], Acc) -> lez(T, Acc + 1).
6
%% 将某个元素重复n次返回一个链表 dulicate(0,_) ->[];
dulicate(N,DATA) -> [X | dulicate(N-1,X)]. %% 尾递归版本 my_duplicate(ARG,DATA) -> my_duplicate_a(ARG,DATA,[]).
my_duplicate_a(0,_,RESULT) -> RESULT;
my_duplicate_a(ARG,DATA,RESULT)-> my_duplicate_a(ARG-1,DATA,[DATA | RESULT]). 21
22 %%翻转一个链表
23
24 zreverse_list([]) -> [];
25 zreverse_list([X|REST]) -> [zreverse_list(REST)|[X]]
26
27 %%尾递归版本
28 tail_reverse_list(N)->reverse_list(N,[]).
29 reverse_list([],ACC) -> ACC;
30 reverse_list([X|REST],ACC) -> reverse_list(REST,[X|ACC]).
31
32 %%获取一个链表的前N项,如果N大于链表长度,返回整个链表
33
34 sublist([], _) -> [];
35 sublist(X, N) when N < 0 -> [];
36 sublist(X, N) when N =:= 0 -> [];
37 sublist([X | REST], N) -> [X | sublist(REST, N - 1)].
38
39 %%尾递归版本
40
41 rsublist(N, X) -> zsublist(N, X, []).
42 zsublist([], _, ACC) -> ACC;
43 zsublist(X, N, ACC) when N < 0 -> ACC;
44 zsublist(X, N, ACC) when N =:= 0 -> ACC;
45 zsublist([X | REST], N, ACC) -> zsublist(REST, N - 1, ACC++[X]).
46
47
48 %%合并两个链表,两个链表每取出一项组成元祖 最后返回一个链表 eg: [1,2],[a,b] => [{1,a},{2,b}]
49
50 zzip([], _) -> [];
51 zzip(_, []) -> [];
52 zzip([], []) -> [];
53 zzip([X | RE], [Y | ST]) -> [{X, Y} | zzip(RE, ST)].
54
55 %%尾递归版本
56 tail_zzip(X, Y) -> rzzip(X, Y, []).
57
58 rzzip([], _, ACC) -> ACC;
59 rzzip(_, [], ACC) -> ACC;
60 rzzip([], [], ACC) -> ACC;
61 rzzip([X | RE], [Y | ST], ACC) -> rzzip(RE, ST, ACC ++ [{X, Y}]).
erlang尾递归练习的更多相关文章
- erlang尾递归的概括
网上看了些,自己总结了下 .没有局部变量,否则会爆栈 .递归函数的参数里面,至少有一个用来作为循环,另外一个一般用来保存临时结果,两者一起形成循环
- about python
函数式编程 λ演算 LISP,Erlang 尾递归 栈的使用 避免防御式编程 ER实体Entity关系relationship OOP [OOA/D] 属性.行为 继承.聚合.关联 抽象.封装 笛卡尔 ...
- [Erlang 0120] Know a little Core Erlang
Erlang开发者或多或少都用过或者听说过Core erlang,它是什么样的呢?新建一个测试模块a.erl,如下操作会生成core erlang代码而非a.beam: Eshell V6.0 ...
- [Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1
Erlang 增加 Maps数据类型并不是很突然,因为这个提议已经进行了2~3年之久,只不过Joe Armstrong老爷子最近一篇文章Big changes to Erlang掀起不小了风 ...
- Erlang error handling
Erlang error handling Contents Preface try-catch Process link Erlang-way error handling OTP supervis ...
- Erlang 初学者技巧及避免的陷阱
1. 传参或在匿名函数内慎用self() 通常在做消息传递或新建进程的时候我们需要将当前进程的Pid发给目标进程以便接收返回信息,但初学者不留意容易犯以下错误 spawn(fun() -> lo ...
- Erlang初学
这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程.一切都是常量.轻量进程.进程端口映射及典型缺点等内容,需要的朋友可以参考下 我对 Erlang 编程理念 ...
- erlang note
没有关于erlang interface ,继续寻找吧... --------------------------------------------------------------- erl - ...
- Erlang 102 Erlang并发编程
笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期 变更说明 2014-11-02 A outline 2014 ...
随机推荐
- [LeetCode 题解]: Reverse Nodes in K-Groups
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a li ...
- solr特点八:Spatial(空间搜索)
前言 在美团CRM系统中,搜索商家的效率与公司的销售额息息相关,为了让BD们更便捷又直观地去搜索商家,美团CRM技术团队基于Solr提供了空间搜索功能,其中移动端周边商家搜索和PC端的地图模式搜索功能 ...
- Cookie的创建与删除
Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法.例如,当用户访问站点时,可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问站点时,应用程序就可以检索以前保 ...
- k8s service
Service也是k8s的最小操作单元,是真实应用服务的抽象 Service通常用来将浮动的资源与后端真实提供服务的容器进行关联 Service对外表现为一个单一的访问接口,外部不需要了解后端的规模与 ...
- util.Date转化成sql.date格式
https://www.cnblogs.com/zhaotiancheng/p/6413067.html
- poj做的题
1699 1080 1170 1239(不错) 1659(读读怎么写)
- PHP header函数设置http报文头示例详解以及解决http返回头中content-length与Transfer-Encoding: chunked的问题
最近在服务器上,多媒体与设备(摄像头)对接的时候,总是发生错误导致设备崩溃,抓包发现响应头不对,没有返回length,使得摄像头立即崩溃.找了一下资料,改了一下响应头就好了. //定义编码 heade ...
- “全栈2019”Java第九十九章:局部内部类与继承详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 洛谷P2664 树上游戏(点分治)
传送门 题解 因为一个sb错误调了一个晚上……鬼晓得我为什么$solve(rt)$会写成$solve(v)$啊!!!一个$O(logn)$被我硬生生写成$O(n)$了竟然还能过$5$个点……话说还一直 ...
- Generating an arbitrary digit password dictionary
原理说明:以增量方式从开始到结束! 实现方法:CMD命令 特点:纯数字 语法: FOR /L %variable IN (start,step,end) DO command [command-par ...