重复

作者: 悟剑声 | 来源:发表于2019-06-22 12:39 被阅读0次
  • 递归
    在自己的定义中调用自己的函数叫做递归函数(Recursive Function)。
(define (fact n)
  (if (= n 1)
      1
      (* n (fact (- n 1)))))
(define (list*2 ls)
  (if (null? ls)
      '()
      (cons (* 2 (car ls))
             (list*2 (cdr ls)))))
  • 尾递归
    普通的递归调用并不高效因为它既浪费存储空间又具有函数调用开销。与之相反,尾递归函数包含了计算结果,当计算结束时直接将其返回。特别地,由于Scheme规范要求尾递归调用转化为循环,因此尾递归调用就不存在函数调用开销。
(define (fact-tail n)
  (fact-rec n n))

(define (fact-rec n p)
  (if (= n 1)
      p
      (let ((m (- n 1)))
    (fact-rec m (* p m)))))
  • 命名let
    命名let(named let)可以用来表达循环。[代码片段3]中的函数fact-let展示了如何使用命名let来计算阶乘。fact-let函数使用了一个命名let表达式(loop),这与在[代码片段2]中展示的fact-rec函数是不同的。在被注释为;1的那行,代码将参数n1和p都初始化为n。再每次循环后,参数在被注释为;2的那行更新:将n1减1,而将p乘以(n1 - 1)。

在Scheme中,用命名let来表达循环是俗成的方法。

(define (fact-let n)
  (let loop((n1 n) (p n))           ; 1
    (if (= n1 1)                    
    p
    (let ((m (- n1 1)))
      (loop m (* p m))))))      ; 2
  • letrec
(define (fact-letrec n)
  (letrec ((iter (lambda (n1 p)
           (if (= n1 1)
               p
               (let ((m (- n1 1)))
             (iter m (* p m)))))))     ; *
    (iter n n)))
  • do表达式

相关文章

  • 重复+重复+重复

    积 累 前提是我们目标定位准确,同时实施的行动确保相对正确,接下来一切便是交给时间。 常说每天进步一点点,也就是“...

  • 重复,重复,重复

    作者 | 鲁佳 来源 | (公众号:鲁佳演说) 从知道到做到,真正发生改变,其实并没有那么容易。我以前是个思考者,...

  • 重复重复再重复

    过去的一年,自己接触了得到,接触了007不出局,以及平常社群的一些文章,读过或者听过后觉得很有道理很过瘾,...

  • 重复、重复、再重复

    同学,你好! 非常荣幸和与你一起携手参加创新训练营。这是一篇充满诚意的学习指导贴,希望你能花2分钟时间看完它。 我...

  • 重复重复再重复

    自学是一门手艺。这是李笑来老师的又一本新书名,同时也是我们在成长路上需要植入脑海的一个非常重要的观点。 在我们日常...

  • 重复重复再重复

    前两天的《罗胖精选》里面,我们选了华杉老师的《品牌营销30讲》课程里的一节,免费放给大家听。里面反复强调了一个观点...

  • 重复重复再重复

    我曾经看过一则报道,有人采访了早前国内演讲比赛的获奖者,问他们成功的秘诀是什么,冠亚军说,没什么,就是练了很多遍,...

  • 重复、重复、再重复

    快速浏览了这本书,文中有两个受益的话,并开始执行。一个是做好计划,写下当天最重要的7件事,然后分等级(毕竟我并不想...

  • 重复重复再重复

    知道了一个好的道理,开始决定践行某一个好的习惯,改变某一个行为,决定再也不做什么...... 然而过一段时间,就会...

  • 重复重复在重复

    重复我的重复,重复到极致,重复极致背后就是新生

网友评论

      本文标题:重复

      本文链接:https://www.haomeiwen.com/subject/khbawftx.html