sicp練習1 12 帕斯卡三角(楊輝三角)

2021-08-25 20:25:36 字數 1515 閱讀 2889

楊輝三角以前在學習c語言時候,用迴圈很容易實現。由於剛剛接觸函式式語言,遞迴和迭代方式實現迴圈還沒深入我心。下意思的想用鍊錶來實現,但發現自己對scheme的鍊錶操作太不熟悉,總會出現這樣那樣子的無法自我解釋的問題。最後參考了@dennis_zane

的pascal實現,

dennis_zane

是把楊輝三角左對齊,然後根據座標之間的關係實現:(

pascal x y) ,其中x,y為座標,

(pascal x y) 的值為座標對應的楊輝三角數值。看了

dennis_zane

的實現以後,很慚愧自己沒有想到。想想其未最終列印出結果,那我來繼續完成其工作。當然也是用遞迴和迭代。

(define (pascal x y)

(cond ((> y x) (display "error"))

((= x 1) 1)

((= x 2) 1)

((= y 1) 1)

((= x y) 1)

(else

(+ (pascal (- x 1) y) (pascal (- x 1) (- y 1))))))

;(pascal 3 2)

(define (display-blank-space n)

(if(> n 0)(begin (display " ")

(display-blank-space (- n 1)))))

(define (pascal-display x y n)

(cond ((and (<= x n) (= x y) (not (= y 1))) (begin (display(pascal x y))

(display "\n")

(pascal-display (+ x 1) 1 n)))

((and (<= x n) (= x y) (= y 1)) (begin (display-blank-space (- n x))

(display(pascal x y))

(display "\n")

(pascal-display (+ x 1) 1 n)))

((and (<= x n) (> x y) (not (= y 1))) (begin (display(pascal x y))

(display " ")

(pascal-display x (+ y 1) n)))

((and (<= x n) (> x y) (= y 1)) (begin (display-blank-space (- n x))

(display(pascal x y))

(display " ")

(pascal-display x (+ y 1) n)))

(else (begin (display "end! ")

(display n)

(display " rows were displayed")))))

(pascal-display 1 1 8)

執行結果的輸出截圖如下:

SICP練習1 12生成帕斯卡三角形

這道練習的中文版翻譯有誤,原文是 write a procedure that computes elements of pascal s by means of a recursive process.譯文只翻譯了 它採用遞迴計算過程計算出帕斯卡三角形。這裡應該是 帕斯卡三角形的各個元素 才對。在...

楊輝三角 帕斯卡三角形(C語言)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。楊輝三角是中國古代數學的傑出研究成果之一,它把二項式係數圖形化,把組合數內在的一些代數性質直觀地從圖形中體現出來,是一種離散...

帕斯卡三角形 python

題目出自python入門經典第六章課後題 解決思路如下 每一行開始與結尾人為插入0元素,便於計算,在最後輸出的時候不顯示就可以了 lines input input the lines while not lines.isdigit print please enter an integer lin...