1
A
回答
1
這裏是計算第n行的代碼。
第一部分掃描一行,計算下一行。第一行必須以0作爲前綴,以便下一行中的第一個「1」是一個總和,就像其他元素一樣。它在2個列表上遞歸:
pascal_next_row([X],[X]).
pascal_next_row([H,H2|T],[A|B]):-
pascal_next_row([H2|T],B),
A is H + H2.
第二部分計算所有行,直到被問到的那一行。它遞歸的N:
pascal(0, [1]) :- !.
pascal(N, R) :-
N1 is N-1,
pascal(N1, R1),
pascal_next_row([0|R1], R).
如果您需要完整的三角形,所有你需要做的是改變第二個參數來處理行的列表,並收集他們:
pascal(0, [[1]]) :- !.
pascal(N, [R, R1 | RN]) :-
N1 is N-1,
pascal(N1, [R1 | RN]),
pascal_next_row([0|R1], R).
1
This answer to a code golf有在序言中實現,只是擴展名:
+0
有趣的鏈接,謝謝。我將我的實現複製到代碼高爾夫球上,隨時重新開始比賽:-) – Jerome 2009-11-17 10:15:29
0
帕斯卡三角也被稱爲塔爾塔利亞三角:
sumC([X,Y],[Z]) :- Z is X + Y.
sumC([X,Y|L], Z):- H is X + Y,
sumC([Y|L],L2),
Z = [H|L2].
tartaglia(1,[1]) :- ! .
tartaglia(2,[1,1]) :- !.
tartaglia(N, L) :- Ant is N - 1,
tartaglia(Ant,L2),
sumC(L2,R),
append([1|R],[1],L), !.
使用的輔助謂詞sumC,你可以很容易:
?- tartaglia(3,R).
R = [1, 2, 1].
?- tartaglia(2,R).
R = [1, 1].
?- tartaglia(1,R).
R = [1].
?- tartaglia(6,R).
R = [1, 5, 10, 10, 5, 1].
正如我在評論說。你問第n行。你例子中的[1,2,1]是第三行。
相關問題
- 1. pascal triangle
- 2. Verticalize Triangle
- 3. Asterisk Triangle
- 4. Pascal's Triangle - 查找第n行
- 5. Move Triangle Arrow Sideways
- 6. Ray-triangle intersetion
- 7. Sierpinski Triangle Java
- 8. Circle with Triangle Strip
- 9. Axis-Aligned Line Intersects Triangle
- 10. Triangle Side Sum程序
- 11. 調整NSView中的Grippy/Triangle
- 12. 格式化Pascal三角形
- 13. 用mpz_t製作pascal的三角形
- 14. 有沒有人在C++項目中使用Triangle/Triangle ++庫? (delaunay三角測量)
- 15. Pascal Max_Heapify
- 16. 如何獲得交點? Ray Triangle Intersection C++
- 17. pascal三角形正確格式化java
- 18. EnumServicesStatus pascal聲明
- 19. BigInteger in Pascal
- 20. 學習Pascal FC
- 21. Indy10免費Pascal
- 22. Pascal String to cstring
- 23. Pascal WriteLn失敗
- 24. 嵌入pascal
- 25. Pascal error with array
- 26. Pascal Bubble排序
- 27. 這個Pascal的三角形程序爲什麼不起作用?
- 28. C中的Pascal三角形
- 29. Pascal中的模量
- 30. Pascal編程幫助
沒有我需要它來確定整個三角形不僅是一排 – thisnotmyname 2009-11-17 00:47:47
第二行是[1,1],而不是[1,2,1],這是第三行。 – 2009-11-18 04:47:21