SICP 1.12

解:

(define (pascal n)
  (define (get n i)
    (cond ((<= i 1) 1)
          ((>= i n) 1)
          (else (+ (get (- n 1) (- i 1))
                   (get (- n 1) i)))))
  (define (iter i n)
    (if (<= i n)
        (and (print (get n i))
             (print " ")
             (iter (+ i 1) n))
        #f))
  (define (recurse n)
    (if (> n 0)
        (recurse (- n 1))
        #f)
    (iter 1 n)
    (newline))
  (recurse n))

需要注意递归过程和递归计算过程概念上的区别。

SICP 1.12,布布扣,bubuko.com

时间: 2024-10-14 04:23:52

SICP 1.12的相关文章

vc编程中的20点小笔记

机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能只通过阅读来掌握机器学习的技能,需要进行大量的练习.本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤.通过本文将学到: 端到端地预测(分类与回归)模型的项目结构. 如何将前面学到的内容引入到项目中. 如何通过这个项目模板来得到一个高准确度的模板. 副诼匚盼胁臼匾膊讶赖期放判鼻懒合谖

SICP 习题 (2.12)解题总结 :区间的不同实现方式

SICP 习题 2.12 要求我们定义一个构造函数make-center-percent,它接收两个参数,分别代表中心点和一个误差百分比.我们需要通过这个构造函数产生一个区间.此外还需要定义一个选择函数percent,用来获取指定区间的误差百分比.还有就是需要实现一个center函数用于获取区间的中间点. 这里的关键就是要我们明白一个复合数据类型可能会有不同的表现形式,比如这里的区间可以用起点和终点表示,也可以使用中心点和误差表示. 从内部实现来讲,可以简单的将两种表现形式相关的数据都保存起来,

【SICP练习】4 练习1.11-1.12

练习1.11 这种题目太像是数学题目了,不过拿到编程上又有一些的难度.我们先根据题目中的条件,写出类似于第25页最下面的变换规则.我们先列出如下内容: a-- f(n-1)  f(2)  f(3)  f(4)  f(5) b-- f(n-2)  f(1)  f(2)  f(3)  f(4) c—f(n-3)  f(0)  f(1)  f(2)  f(3) 于是继而得出下式: a—a+2b+3c b—a c—b 于是核心部分已经出来了: (f-iter (a+2b+3c) a b (- count

【SICP练习】8 练习1.12

 这道练习的翻译有误.原文是:Write a procedure that computes elements of Pascal's triangle bymeans of a recursive process.正确的翻译应该是计算帕斯卡三角形的各个元素. y : 0       1 1      1  1 2    1  2  1 3   1  3  3  1 4 1  4  6 4  1 5 x: 0  1  2 3  4 如果用x代表帕斯卡三角形中列的元素的值,y则代表行的元素的值

SICP~计算机程序的构造和解释~ 1.12 c++实现

题目: 采用递归计算过程计算出帕斯卡三角形的各个元素. row:0        11       1 12      1 2 13     1 3 3 14    1 4 6 4 15   . . . . . .col: 0 1 2 3 4 //c++ //递归 #include<iostream> using namespace std; int pascaler(int row ,int col){ int value; if(col>row) { cout<<&quo

SICP 习题 (2.9)解题总结:区间的宽度和区间加减乘除的关系

SICP 习题 2.9 像是一个数学题,要我们证明区间的和与差的宽度是被加和被减的区间的宽度的函数,而对于乘法和除法来说不成立. 书中所谓宽度就是区间起点和终点差的一半,以我看来更像是区间宽度的一半,不管怎么样,差不多是一个意思.如果你把区间看成是一个线段的话,所谓宽度应该就是起点和终点的差,如果一定要把宽度的一半记作是宽度也无所谓的. 证明区间的和的宽度是被加区间的宽度的函数这一点是比较容易证明的,看下面的证明步骤: 如果有区间1是(a1 b1),还有区间2是(a2 b2), 那么区间1的宽度

C开发者眼中的SICP学习

谈谈自己看SICP的一些体会 第一章  构造过程抽象 这一章其实和C语言完全等价, 不打算深入学习LISP的完全可以快速略过. 基本上没有什么大的价值. 这一章最核心的价值就是下面3句话, 理解了这一章就算看完了. 语言的原型系统 ·如何组合 ·如何提供高层抽象 这3句话是所有语言的核心. 基本上适用所有人. 为什么有人3天学会Java, 有人3年. 关键就在你是否深入理解语言的这3点. 学习任何语言都是直接奔这个主题.所以,有些查字典的完全可以跳过.任何语言, 3天足够入门了. 后面的递归和迭

[SICP Notes] 1.1 The Elements of Programming

About the Book To know more about programming, I have decided to start reading the famous Structure and Interpretation of Computer Programs (SICP, or the Wizard Book), which is first published by MIT in 1985. The Wizard Book used MIT Scheme, which is

SICP 练习 (2.9)解决摘要:宽度和区间运算的关系间隔

SICP 2.9 像是一个数学题,要我们证明区间的和与差的宽度是被加和被减的区间的宽度的函数,而对于乘法和除法来说不成立. 书中所谓宽度就是区间起点和终点差的一半.以我看来更像是区间宽度的一半.无论怎么样.差点儿相同是一个意思. 假设你把区间看成是一个线段的话,所谓宽度应该就是起点和终点的差.假设一定要把宽度的一半记作是宽度也无所谓的. 证明区间的和的宽度是被加区间的宽度的函数这一点是比較easy证明的.看以下的证明步骤: 假设有区间1是(a1 b1),还有区间2是(a2 b2), 那么区间1的