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. [label][OS] 制作 U 盘安装 Windows 7

    U盘安装完美的WIN7操作系统教程 [编辑] 请使用正版系统   http://item.jd.com/965031.html   以保证您的电脑信息安全 此教程适用与 win7及win8 准备工作 ...

  2. MS EXCEL2013添加Oracle Web ADI菜单

  3. REQUEST的TRACE文件

    --REQUEST的TRACE文件 SELECT    'Trace Name: '       || DEST.VALUE       || '/'       || LOWER (DBNM.VAL ...

  4. cxrichedit导入WORD

    cxrichedit导入WORD word := CreateOLEObject('Word.Application');  word.Documents.Open(l_path,false);  w ...

  5. Buffer Pool--数据库内存结构

    数据库从操作系统申请到的内存可分为两部分:1.缓存池内存(数据页和空闲页)2.非缓存池内存(线程/DLL/连接服务器等) Note:通过服务器实例属性设置的最大/最小服务器内存是指缓存池内存Note: ...

  6. Hadoop集群 -Eclipse开发环境设置

    1.Hadoop开发环境简介 1.1 Hadoop集群简介 Java版本:jdk-6u31-linux-i586.bin Linux系统:CentOS6.0 Hadoop版本:hadoop-1.0.0 ...

  7. WPF 无边框拖动

    无边框之后的拖动方法有三种. 我个人是喜欢第一和第三的方法,看个人去需求. 第三种代码比较仓促,有需要者可以立马用,或者稍作整理修改. 对于WIN10 .NET 4.5以上的框架可以使用 WIndow ...

  8. Delphi XE2 编译ralease版本,无法添加UAC解决方法

    我今天把一个原来是Delphi2007的工程升级到了Delphi XE2,在编译ralease版本时候,发现无法添加UAC,我觉得可能是升级的原因,随后我用XE2新建了一个工程,但是在编译raleas ...

  9. 1083 矩阵取数问题(DP)

    1083 矩阵取数问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走 ...

  10. python 项目自动生成 requirements.txt 文件

    生成 requirements.txt 文件的目的: 安装 pthon 项目时需要把此项目所有依赖的第三方包安装完成.项目依赖的第三方包统一放到 requirements.txt 文件中即可. 怎么自 ...