SML 中的帕斯卡三角
Pascal's Triangle in SML
我正在尝试编写以下类型的函数:
pascal : int * int -> int
其中这对整数分别代表帕斯卡三角形的行和列。
这是我的尝试:
fun pascal(i : int, j : int) : int =
if (i = 0 andalso j = 0) orelse i = j orelse i = 0
then 1
else
pascal(i - 1, j - 1) + pascal(i - 1, j);
它适用于我的基本情况,但在其他情况下会给我奇怪的输出。例如:
pascal(4, 2)
给我 11 而 pascal(4, 1)
给我 15
这有点奇怪,因为只要 if 子句失败并且 else 得到评估,我确实想要 return 上一行元素与上一行元素与一个元素的总和靠左。
我做错了什么?
考虑pascal 1 0
。如果您对 table 使用基于零的索引,那么它应该等于 1。但是:
pascal 1 0 = pascal 0 -1 + pascal 0 0 = 2
你应该采取一些措施来处理负指数和 j
大于 i
的指数。
我正在尝试编写以下类型的函数:
pascal : int * int -> int
其中这对整数分别代表帕斯卡三角形的行和列。
这是我的尝试:
fun pascal(i : int, j : int) : int =
if (i = 0 andalso j = 0) orelse i = j orelse i = 0
then 1
else
pascal(i - 1, j - 1) + pascal(i - 1, j);
它适用于我的基本情况,但在其他情况下会给我奇怪的输出。例如:
pascal(4, 2)
给我 11 而 pascal(4, 1)
给我 15
这有点奇怪,因为只要 if 子句失败并且 else 得到评估,我确实想要 return 上一行元素与上一行元素与一个元素的总和靠左。
我做错了什么?
考虑pascal 1 0
。如果您对 table 使用基于零的索引,那么它应该等于 1。但是:
pascal 1 0 = pascal 0 -1 + pascal 0 0 = 2
你应该采取一些措施来处理负指数和 j
大于 i
的指数。