Recursion 帕斯卡';s三角形行序列

Recursion 帕斯卡';s三角形行序列,recursion,scheme,pascals-triangle,Recursion,Scheme,Pascals Triangle,我目前正在寻找帕斯卡三角形的行序列。我想输入行号并输出列表中的数字序列,直到该行。例如,(Pascal 4)将给出结果(1 1 2 1 3 1) 我正在尝试使用我发现的算法。以下是算法本身: Vc=Vc-1*((r-c)/c) r和c应该是行和列,V0=1。该算法可以在维基百科页面的“计算和单行或对角线”部分找到 以下是我目前掌握的代码: (define pascal n) (cond((zero? n) '()) ((positive? n) (* pascal (- n 1

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

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

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

r和c应该是行和列,V0=1。该算法可以在维基百科页面的“计算和单行或对角线”部分找到

以下是我目前掌握的代码:

(define pascal n)
  (cond((zero? n) '())
       ((positive? n) (* pascal (- n 1) (/ (- n c)c))))
我知道这几乎算不上什么,但我一直在努力寻找使用
let
lambda
来合并列值的函数范围。此外,我还一直在努力实现递归。我真的不知道如何建立基本案例以及如何进入下一步。基本上,我到处都迷路了。我知道这并没有显示太多,但如果朝着正确的方向迈出任何一步,都将不胜感激。

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

#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)
现在我们需要一个过程来将所有的值粘在一起,直到得到所需的行;这适用于球拍:

(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)

我在课堂上讨论了帕斯卡三角形

在你的问题中,Vc的表达式只适用于一行。这可以转化为如下代码:

(define (row r)
  (let loop ((c 1) (row (list 1)))
    (if (= r c)
        row
        (loop (+ c 1) (cons (* (car row) (- r c) (/ c)) row)))))
然后你只需要把一堆行放在一起就可以形成三角形:

(define (rows r)
  (let loop ((r r) (rows (list)))
    (if (zero? r)
        rows
        (loop (- r 1) (append (row r) rows)))))
以下是输出:

> (rows 4)
(1 1 1 1 2 1 1 3 3 1)
第一个函数的基本情况是
(=rc)
,第二个函数的基本情况是
(zero?r)


如果您想清楚地写下标,可以采用TeX使用的表示法:下标由下划线引入,上标由插入符号引入,大于一个字符的任何字符周围都有大括号。因此,符号中的Vc将是V_c,符号中的Vc-1将是V_{c-1}。

感谢您的快速响应!第一个函数用c作为计数器。let循环将c设置为1,并且每次c都将加1,直到r和c相等为止,返回的行将在其中。我也可以看到算法是如何实现的。我不确定的一部分是行(列表1)。这就是(1)。在路过(汽车路过)后,这是否意味着我们现在有一个空位?该元素1现在与(-r1)(/c)相乘。我的理解是cons应该结合元素和列表。我看到了元素。但是列表应该是后面的那一行吗?在函数的最后一行,cons将新元素放在现有行的最前面,它使用维基百科的公式计算新元素。例如,当被称为(行4)时,变量行最初是(1),然后第一次通过循环变为(31),c变为2,然后第二次通过循环行变为(3 1),c变为3,然后第三次通过循环行变为(1 3 1),c变为4,然后循环的第四次r和c都是4,因此函数返回行的当前值,即(1 3 1)。