我已经建立了递归函数来计算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)两次
知道如何优化这个功能吗?
谢谢
我已成功编写了一个代码,使用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) 我正在编写一个代码,它将创建一个可视化的谢尔宾斯基三角形以进行 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
好的,有人可以告诉我,我的当前代码是否可行.我必须使用输入创建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) 我在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 中的代码在表面上有所不同。
我是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中的......一直都在考虑错误
我在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) 我实施了一个天真的解决方案来打印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) 我是一名计算机工程专业的学生,下学期我将开始 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) 我正在编写一个程序,打印出帕斯卡三角形的行,它最多可以工作到第 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 …