标签: pascals-triangle

Pascal Triangle C++中的递归程序优化

我已经建立了递归函数来计算Pascal的三角形值.

有没有办法优化它?

关于Pascal三角形的简短提醒:C(n,k)= C(n-1,k-1)+ C(n-1,k)我的代码是:

int Pascal(int n, int k) {
if (k == 0) return 1;
if (n == 0) return 0;
return Pascal(n - 1, k - 1) + Pascal(n - 1, k);
}
Run Code Online (Sandbox Code Playgroud)

我看到的低效率是它存储了两次值.例:C(6,2)= C(5,1)+ C(5,2)C(6,2)= C(4,0)+ C(4,1)+ C(4,1)+ C(4,2)它将调用C(4,1)两次

知道如何优化这个功能吗?

谢谢

c++ recursion combinatorics pascals-triangle

5
推荐指数
2
解决办法
5814
查看次数

用C++中心Pascal的三角形输出

我已成功编写了一个代码,使用cout.width(total_rows - current_row)以稍微三角形的形状输出Pascal的三角形,但它看起来像这样:

               1 
              1 1 
             1 2 1 
            1 3 3 1 
           1 4 6 4 1 
          1 5 10 10 5 1 
         1 6 15 20 15 6 1 
        1 7 21 35 35 21 7 1 
       1 8 28 56 70 56 28 8 1 
      1 9 36 84 126 126 84 36 9 1 
     1 10 45 120 210 252 210 120 45 10 1 
    1 11 55 165 330 462 462 330 165 55 11 …
Run Code Online (Sandbox Code Playgroud)

c++ fixed-width centering pascals-triangle

5
推荐指数
1
解决办法
5000
查看次数

如何在二维数组中切换行和列?

我正在编写一个代码,它将创建一个可视化的谢尔宾斯基三角形以进行 3D 打印,为了使其工作,我必须使用将创建数组的 Pascal 三角形算法,以便我可以用来告诉我的算法将创建我的三角形不放三角形的地方。

无论如何,问题是,我排列三角形的代码按列而不是像 Pascal 算法那样按行创建三角形,所以我只是想通过重新排列 Pascal 数组的子例程来快速修复。我只是被难住了如何去做,因为我不知道如何避免index out of range错误。

这是为帕斯卡三角形创建数组的代码。

TL:DR我正在尝试重新排列一个数组,其中行是列,列是行

def pascal(n):
    """Prints out n rows of Pascal's triangle."""
    row = [1]
    global array
    array = [[0 for x in range(int(n))] for y in range(int(n))]
    array[0]=row
    k = [0]
    for x in range(int(max(n,0)-1)):
       row=[l+r for l,r in zip(row+k,k+row)]
       array[x+1]=row
    return 1
Run Code Online (Sandbox Code Playgroud)

这是打印数组的输出。我只希望行是列,列是行

def pascal(n):
    """Prints out n rows of Pascal's triangle."""
    row = [1]
    global array
    array = [[0 for x in …
Run Code Online (Sandbox Code Playgroud)

python arrays algorithm multidimensional-array pascals-triangle

5
推荐指数
2
解决办法
5319
查看次数

帕斯卡三角形与递归

好的,有人可以告诉我,我的当前代码是否可行.我必须使用输入创建pascals三角形而不使用任何循环.我一定会递归.

我花了3天时间,这是我能想到的最好的输出.它驱使我INSANE

def pascal(curlvl,newlvl,tri):

  if curlvl == newlvl:
    return ""

  else:

    tri.append(tri[curlvl])

    print(tri)
    return pascal(curlvl+1,newlvl,tri)


def triLvl():
  msg = "Please enter the number of levels to generate:"

  triheight = int(input(msg))

  if triheight < 1:
    print("\n Sorry, the number MUST be positive\n Please try again.")
    return triLvl()

  else:
    return triheight



def main():

   triangle = [1]

   curlvl = 0

   print("Welcome to the Pascal's triangle generator.")

   usrTri = triLvl()
   print(triangle)
   pascal(curlvl,usrTri,triangle)



main()
Run Code Online (Sandbox Code Playgroud)

python recursion pascals-triangle

5
推荐指数
1
解决办法
946
查看次数

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

我在rosettacode遇到过这段代码

my @pascal = [1], { [0, |$_ Z+ |$_, 0] } ... Inf;
.say for @pascal[^4];
# ==>
# [1]
# [1 1]
# [1 2 1]
# [1 3 3 1]
Run Code Online (Sandbox Code Playgroud)

在显式生成器块中,我知道诸如列表展平和|zip 运算符之类的各个运算符是如何Z+工作的,但我很难理解它们如何协作生成下一个数组。有人可以详细解释它是如何工作的吗?谢谢你。

注意:为简洁起见,代码略有重新排列,即它与 Rosetta 中的代码在表面上有所不同。

sequence pascals-triangle raku

5
推荐指数
2
解决办法
108
查看次数

哈斯克尔的Pascal Triangle

我是Haskell的新手,我真的需要一些帮助!

我必须编写一个包含递归函数的程序,使用Pascal三角形技术生成n = 12次幂的二项式系数列表.

我脑子里有一些想法,但因为我刚刚开始,我不知道如何将其实现到haskell?!

有人可以帮帮我吗?

first row: (a+b)^0 = 1
second row: (a+b)^1 = 1a+1b
third row: (a+b)^2 = 1a^2+2ab+1b^2
Run Code Online (Sandbox Code Playgroud)

等等......这是我的主要想法.但我甚至无法尝试这一点,因为我不知道我是如何把它放在Haskell中的......一直都在考虑错误

recursion haskell pascals-triangle

4
推荐指数
3
解决办法
4232
查看次数

当试图打印帕斯卡三角形时,第13次迭代打印错误的答案

我在C中编写一个脚本来打印出pascals三角形,所以我为factorial编写了一个函数,然后将变量c =变为二项式展开式,这直到第n行,它产生输出:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1 
1 10 45 120 210 252 210 120 45 10 1 
1 11 55 165 330 462 462 330 165 55 11 1 …
Run Code Online (Sandbox Code Playgroud)

c pascals-triangle

4
推荐指数
1
解决办法
84
查看次数

用Clojure编写Pascal三角形的更为惯用和简洁的方法是什么?

我实施了一个天真的解决方案来打印Pascal的N深度三角形,我将在下面包含它.我的问题是,在哪些方面可以改进,使其更加惯用?我觉得有很多东西看起来过于冗长或尴尬,例如,这块if感觉不自然:(if (zero? (+ a b)) 1 (+ a b)).感谢您的任何反馈,谢谢!

(defn add-row [cnt acc]
  (let [prev (last acc)]
    (loop [n 0 row []]
      (if (= n cnt)
        row
        (let [a (nth prev (- n 1) 0)
              b (nth prev n 0)]
          (recur (inc n) (conj row (if (zero? (+ a b)) 1 (+ a b)))))))))


(defn pascals-triangle [n]
  (loop [cnt 1 acc []]
    (if (> cnt n)
      acc
      (recur (inc cnt) (conj acc (add-row cnt acc))))))
Run Code Online (Sandbox Code Playgroud)

idiomatic clojure pascals-triangle

3
推荐指数
2
解决办法
272
查看次数

C中的帕斯卡三角形

我是一名计算机工程专业的学生,​​下学期我将开始 C 课程。因此,为了让自己做好准备,我开始自学 C 并偶然发现了一项有趣的任务,该任务旨在让我乍一看似乎不是一个非常高级的水平。

任务是编写一个程序来计算Pascal's Triangle 中给定位置的值。计算它的公式写为element = row! /(位置!*(行 - 位置)!)

我已经编写了一个简单的控制台程序,它似乎可以正常工作,直到我开始使用大量数字对其进行测试。

当用第 16 行和位置 3 尝试这个程序时,它计算出的值为 0,虽然很明显不可能有这样的值(实际上它应该计算值为 560),但这个三角形的所有单元格都应该是整数并且大于一。

我想我在存储和处理大数时遇到了问题。阶乘函数似乎可以正常工作,并且我使用的公式可以正常工作,直到我开始尝试大数字

到目前为止,这里找到了最好的解决方案 -如何打印一个 unsigned long long int(unsigned long long int 的格式说明符)? 使用类型为 uint64_t 的 inttypes.h 库,但它仍然没有给我我需要的结果。

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

void clear_input(void);
uint64_t factorial(int x);

int main()
{
    // Printing
    printf("This program computes the value of a given position in Pascal's Triangle.\n");
    printf("You will be asked for row and …
Run Code Online (Sandbox Code Playgroud)

c largenumber pascals-triangle

3
推荐指数
1
解决办法
1776
查看次数

在C中计算“N选择K”时出现奇怪的计算错误

我正在编写一个程序,打印出帕斯卡三角形的行,它最多可以工作到第 14 行,该行的值为 13。我已将问题范围缩小到我所做的“N 选择 K”的选择函数”,在“12 Choose X”之后似乎会产生不正确的值,我不知道为什么。

这是我计算阶乘的函数(似乎有效)和有问题的函数的代码。还包括第 14 行之后生成的三角形的复制和粘贴。

另外,作为参考,这样做printf("%ld \n", choose(13, 1));会产生 4 的结果。它应该是 13。

long factorial(int value)
{
    int i;
    long running = 1;
    for (i = 1; i <= value; i++)
    {
        running *= i;
    }
    return running;
}

long choose(int n, int k)
{
    if (n < k)
        return 0; 

    return factorial(n) / (factorial(k) * factorial(n - k));
}

Run Code Online (Sandbox Code Playgroud)

1 1 -4 -1 2 4 7 9 9 7 4 2 -1 …

c factorial pascals-triangle

3
推荐指数
1
解决办法
195
查看次数