<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    sicp習題 1.17 1.18解答

    Posted on 2007-05-11 10:04 dennis 閱讀(776) 評論(0)  編輯  收藏 所屬分類: 計算機科學與基礎
        這兩道題目沒什么難度了,冪運算是連續乘,乘法運算就是連續加,改造一下書中的例子和習題1.16就可以了,還是分析一下。

    習題1.17:
    已知兩個過程,double過程可以求出一個整數的兩倍,而halve過程將一個偶數除以2;要求寫出一個過程,只用對數個步驟計算兩個整數的乘積。

    解答:
    計算a*b,考慮兩種情況:
    1)當b是偶數時:
    a*b=2(a*(b/2))
    2)當b是奇數時:
    a*b=a*(b-1)+a

    通過遞歸直接得到lisp過程,很好理解了,預先定義了兩個已知過程double和halve:
    (define (double x) (* x 2))
    (define (halve x) (
    / x 2))
    (define (multiplied a b)
      (cond ((or (
    = b 0) (= a 0)) 0)  
          ((even
    ? b) (double (multiplied a (halve b)))) 
          (
    else (+ a (multiplied a (- b 1))))))

    習題1.18:將1.17的遞歸過程改寫為迭代過程,保持對數個步驟

    分析:遞歸轉化為迭代,關鍵是要抓住狀態遷移間的不變量,我們給它一個狀態變量c,問題歸結為如何保持c+a*b不變。
    1)當b是偶數:
    c+a*b=c+(2a)*(b/2))
    在此過程中的狀態變換:
       c <--- c
       a 
    <--- 2a
       b 
    <--- b/2

    2)當b是奇數:
    c+a*b=(c+a)+a*(b-1)
    回溯此狀態轉換:
      c <--- (a+c)
      a 
    <--- a
      b 
    <--- (b-1)

    由此可以得到該過程的迭代版本,兩個已知過程與上同:
    (define (fast-multiplied-iter a b c)
      (cond ((
    = a 00)
            ((
    = b 0) c)
            ((even
    ? b) (fast-multiplied-iter (double a) (halve b) c))
            (
    else
               (fast
    -multiplied-iter a (- b 1) (+ a c)))))
     (define (fast
    -multiplied a b) (fast-multiplied-iter a b 0))





    主站蜘蛛池模板: 成人性生交视频免费观看| yy6080亚洲一级理论| 亚洲Av无码国产一区二区| 亚洲美女在线国产| 亚洲一区二区在线免费观看| 亚洲一区二区三区国产精华液| 免费国产小视频在线观看| 久久永久免费人妻精品下载| 亚洲国产区男人本色| 久热综合在线亚洲精品| 日本免费一区尤物| 国产免费阿v精品视频网址| 亚洲色大成网站www永久男同| 丁香五月亚洲综合深深爱| 97在线观免费视频观看| 本免费AV无码专区一区| jiz zz在亚洲| 亚洲av无码乱码国产精品fc2| 精品国产免费观看| 91短视频在线免费观看| 国产免费区在线观看十分钟| 亚洲偷偷自拍高清| 亚洲国产精品久久久久网站 | 亚洲精品免费在线| 一级做a爰片久久毛片免费看 | 亚洲精品国产精品乱码不卞 | 精品熟女少妇av免费久久| 青草青草视频2免费观看| 亚洲国产精品xo在线观看| 亚洲精品无码永久在线观看你懂的| 在线免费观看视频你懂的| 24小时在线免费视频| 日韩电影免费在线观看网站| 国产AV无码专区亚洲AV蜜芽 | 亚洲午夜成人精品无码色欲| 久久久久久a亚洲欧洲AV| 亚洲色婷婷一区二区三区| 亚洲福利在线播放| 日韩中文字幕在线免费观看| 亚洲国产精品免费观看| 99视频在线免费|