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尾递归练习的更多相关文章

  1. erlang尾递归的概括

    网上看了些,自己总结了下 .没有局部变量,否则会爆栈 .递归函数的参数里面,至少有一个用来作为循环,另外一个一般用来保存临时结果,两者一起形成循环

  2. about python

    函数式编程 λ演算 LISP,Erlang 尾递归 栈的使用 避免防御式编程 ER实体Entity关系relationship OOP [OOA/D] 属性.行为 继承.聚合.关联 抽象.封装 笛卡尔 ...

  3. [Erlang 0120] Know a little Core Erlang

      Erlang开发者或多或少都用过或者听说过Core erlang,它是什么样的呢?新建一个测试模块a.erl,如下操作会生成core erlang代码而非a.beam:   Eshell V6.0 ...

  4. [Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1

         Erlang 增加 Maps数据类型并不是很突然,因为这个提议已经进行了2~3年之久,只不过Joe Armstrong老爷子最近一篇文章Big changes to Erlang掀起不小了风 ...

  5. Erlang error handling

    Erlang error handling Contents Preface try-catch Process link Erlang-way error handling OTP supervis ...

  6. Erlang 初学者技巧及避免的陷阱

    1. 传参或在匿名函数内慎用self() 通常在做消息传递或新建进程的时候我们需要将当前进程的Pid发给目标进程以便接收返回信息,但初学者不留意容易犯以下错误 spawn(fun() -> lo ...

  7. Erlang初学

    这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程.一切都是常量.轻量进程.进程端口映射及典型缺点等内容,需要的朋友可以参考下 我对 Erlang 编程理念 ...

  8. erlang note

    没有关于erlang interface ,继续寻找吧... --------------------------------------------------------------- erl - ...

  9. Erlang 102 Erlang并发编程

    笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-02 A outline 2014 ...

随机推荐

  1. D3 数据可视化实战 笔记

    学习真是件奇妙的事情.这本书我之前都看过,有些的知识点却完全没有印象. 总结:把用到的知识好好研究:平时可以了解其他技术的基础,把相关的资料和难点记录下来. javascript陷阱 1.变量类型 v ...

  2. mysql my.cnf优化

    [mysqld] lower_case_table_names = 1sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION skip_name_r ...

  3. Hadoop各个组件与端口

    组件 Daemon 端口 配置 说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传输 HDFS DataNode 50075 ...

  4. [JXOI2017]颜色 线段树求点对贡献

    [JXOI2017]颜色 题目链接 https://www.luogu.org/problemnew/show/P4065 题目描述 可怜有一个长度为 n 的正整数序列 Ai,其中相同的正整数代表着相 ...

  5. python网络编程--管道,信号量,Event,进程池,回调函数

    1.管道 加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行任务修改,即串行修改,速度慢了,但牺牲了速度却保证了数据安全. 文件共享数据实现进程间的通信,但问题是: 1.效率低(共享 ...

  6. Java io流完成复制粘贴功能

    JAVA 中io字节输入输出流 完成复制粘贴功能: public static void main(String[] args) throws Exception{        // 创建输入流要读 ...

  7. Elasticsearch(9):使用Logstash-input-jdbc同步数据库中的数

    1.数据同步方式 全量同步与增量同步 全量同步是指全部将数据同步到es,通常是刚建立es,第一次同步时使用.增量同步是指将后续的更新.插入记录同步到es. 2.常用的一些ES同步方法 1). elas ...

  8. php性能优化二(PHP配置php.ini)

    PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置. # vi /etc/PHP.ini (1) ...

  9. zookeeper 高可用集群搭建

    前言 记录Zookeeper集群搭建的过程! 什么是 Zookeeper ? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hado ...

  10. 图的基础---关键路径理解和实现(Java)

    引言 之前所说的拓扑排序是为了解决一个工程能否顺利进行的问题.但在生活中,我们还会经常遇到如何解决工程完成需要的最短时间问题.     举个例子,我们需要制作一台汽车,我们需要先造各种各样的零件,然后 ...