zoukankan      html  css  js  c++  java
  • 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}]).

  • 相关阅读:
    方向ajax(http long request实现实时通信)
    HTTP防盗链与反防盗链
    linux开启过程详解
    自动化运维工具----saltstack安装及配置
    python----网络编程(TCP通讯)
    windows----bat方式实现ftp推送
    shell----ftp推送
    python----FTP文件拉取(new)
    haproxy----四层负载均衡
    python----时间转换
  • 原文地址:https://www.cnblogs.com/or2-/p/7244520.html
Copyright © 2011-2022 走看看