recursion - 帕斯卡的三角行序列

标签 recursion scheme pascals-triangle

我目前正在寻找帕斯卡三角形的行序列。我想输入行号并输出列表中直到该行的数字序列。例如,(Pascal 4) 将给出结果 (1 1 1 1 2 1 1 3 3 1)

我正在尝试使用我发现的算法。这是算法本身:

Vc = Vc-1 * ((r - c)/c)

rc 应该是行和列,并且 V0=1。该算法可以在维基百科页面上标题为“计算和单个行或对角线”的部分中找到。

这是我到目前为止的代码:

(define pascal n)
  (cond((zero? n) '())
       ((positive? n) (* pascal (- n 1) (/ (- n c)c))))

我知道这几乎没什么,但我一直在努力尝试使用 letlambda 来确定函数的作用域以合并列值。此外,我也一直在递归方面苦苦挣扎。我真的不知道如何建立基本案例以及如何进入下一步。基本上,我到处都迷路了。我知道这并没有显示出太多内容,但任何朝着正确方向迈出的一步都将不胜感激。

最佳答案

使用 entry 作为指导在维基百科中,这是算法的简单实现,用于计算给定行和列的帕斯卡三角形中的值,如链接中所述:

#lang racket

(define (pascal row column)
  (define (aux r c)
    (if (zero? c)
        1
        (* (/ (- r c) c)
           (aux r (sub1 c)))))
  (aux (add1 row) column))

例如,以下代码将返回前四行值,注意行和列均以零开头:

(pascal 0 0)

(pascal 1 0)
(pascal 1 1)

(pascal 2 0)
(pascal 2 1)
(pascal 2 2)

(pascal 3 0)
(pascal 3 1)
(pascal 3 2)
(pascal 3 3)

现在我们需要一个过程来将所有值粘在一起,直到所需的行;这适用于 Racket :

(define (pascal-up-to-row n)
  (for*/list ((i (in-range n))
              (j (in-range (add1 i))))
    (pascal i j)))

结果符合预期:

(pascal-up-to-row 4)
> '(1 1 1 1 2 1 1 3 3 1)

关于recursion - 帕斯卡的三角行序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413619/

相关文章:

reactjs - 如何为嵌套子菜单创建键?

python - 即使基本情况是完美的,递归也不会终止

macros - Racket 与 Scheme 宏

sequence - 关于Raku中数组生成序列的问题

java - 生成帕斯卡三角形的最佳方法(两种提到的方法)

PASCAL TRIANGLE 中数字的正确对齐

recursion - 在 Groovy 中递归列出与特定文件类型匹配的所有文件

javascript - 递归函数中断

scheme - 加载文件时如何关闭 MIT-Scheme 中的解释器日志

functional-programming - 方案语言案例有条件进行多次测试?