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

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

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

    莊周夢蝶

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

    sicp 1.16解答

    Posted on 2007-05-11 08:51 dennis 閱讀(888) 評論(0)  編輯  收藏 所屬分類: 計算機科學與基礎
        此題充分展示了如何將遞歸轉化為迭代的技巧:定義一個不變量,要求它在迭代狀態之間保持不變!題目如下:
    寫一個過程求平方,并且只用對數個步驟。

    解答:
    考慮一個附加狀態a,如何保持ab**n(b**n表示b的n次方)在狀態改變間保持不變.
    1)當n是偶數:
    a(b2)n/2 = abn
    bn = (bn/2)2 = (b2)n/2
    在這個過程中回溯狀態的遷移:



        a ← a

        b ← b2

        n ← n
    /2

    2)當n是奇數:
    (ab)b(n-1) = abn
    回溯狀態的變遷:


        a ← a 
    * b

        b ← b

        n ← n
    -1

    就此可以寫出lisp過程了:
    (define (even? n) (= (remainder n 20))
    (define (square n) (
    * n n))
    (define (fast
    -expr b n)
      (define (iter a b n)
        (cond ((
    = n 0) a)
              ((even
    ? n) (iter a (square b) (/ n 2)))
              (
    else (iter (* a b) b (- n 1)))))
      (iter 
    1 b n))

    這道題目一開始我的解答完全錯了!-_-,我理解錯了題意,一直將指數對半折,這樣的步驟是n/2步而不是對數步驟,階仍然是(theta)(n):
    (define (fast-expt-iter b product counter)
      (cond ((
    = counter 0) product)
        ((even
    ? counter) (fast-expt-iter b (* (square b) product) (* 2 (- (/ counter 21)))) 
        
        (
    else
          (
    * b (fast-expt-iter b product (- counter 1)))
      )))
    (define (fast
    -exptt b n)
      (fast
    -expt-iter b 1 n))


    主站蜘蛛池模板: 日本免费xxxx| 久久久精品2019免费观看 | 亚洲网红精品大秀在线观看| 免费人人潮人人爽一区二区| 国产美女精品久久久久久久免费| 亚洲熟女www一区二区三区| 成人免费午间影院在线观看| 亚洲综合一区国产精品| 免费特级黄毛片在线成人观看| 亚洲国产成人精品无码区二本 | 亚洲人色婷婷成人网站在线观看| A国产一区二区免费入口| 亚洲性猛交XXXX| 免费观看男人吊女人视频| 中文字幕亚洲免费无线观看日本| 中文字幕在线免费| 亚洲精品中文字幕无乱码麻豆| 成年在线网站免费观看无广告 | 亚洲an日韩专区在线| 三年片在线观看免费观看高清电影| 亚洲精品第一综合99久久| 国产一区二区三区免费看| 一级白嫩美女毛片免费| 国产v亚洲v天堂无码网站| 97视频免费观看2区| 亚洲色精品VR一区区三区| 免费大香伊蕉在人线国产| 最近免费中文字幕中文高清 | 亚洲免费福利在线视频| 四虎永久在线精品视频免费观看| 人妖系列免费网站观看| 亚洲国产精品第一区二区| 最新中文字幕免费视频| jizz在线免费观看| 亚洲黄色网站视频| 国产成人无码a区在线观看视频免费 | 无码的免费不卡毛片视频| 久久久久无码精品亚洲日韩| 毛片免费视频播放| 9久热精品免费观看视频| 亚洲国产成a人v在线观看 |