完成使用迭代函数创建pascal三角形的赋值后,我尝试使用递归函数重新创建它.我已经达到了这样的程度,我可以通过它来生成与作为参数传入的数字相对应的单独行.但有几次尝试让它产生整个三角形直到并包括那一行都失败了.我甚至尝试编写一个单独的函数,它迭代输入数字的范围,并使用迭代数字调用递归函数,同时在返回该列表之前将各行附加到列表.所需的输出应该是列表,其中每个内部列表包含三角形的一行.像这样:
[[1], [1, 1], [1, 2, 1]...]
Run Code Online (Sandbox Code Playgroud)
相反,它返回一个完全填充1的嵌套列表的乱七八糟的混乱.
这是有问题的递归函数,没有附加行的第二个函数(我真的想要1个全包函数):
def triangle(n):
if n == 0:
return []
elif n == 1:
return [1]
else:
new_row = [1]
last_row = triangle(n-1)
for i in range(len(last_row)-1):
new_row.append(last_row[i] + last_row[i+1])
new_row += [1]
return new_row
Run Code Online (Sandbox Code Playgroud)
要清楚,我已经完成了分配的任务,这只是为了更深入地理解递归...
迭代解决方案:
def triangle(n):
result = []
for row in range(n):
newrow = [1]
for col in range(1, row+1):
newcell = newrow[col-1] * float(row+1-col)/col
newrow.append(int(newcell))
result.append(newrow)
return result
Run Code Online (Sandbox Code Playgroud) 我在尝试解决这个问题时遇到了一些麻烦。代码如下:
function pasc(n){
var result = [[1]];
for (var row = 1; row < n; row++){
for (var col = 1; col <= row; col++){
result[row][col] = result[row - 1][col] + result[row - 1][col - 1];
}
}
return result;
}
pasc(10)
for (var i = 0; i < result.length; i++){
document.write(result[i]+"<br>");
}
Run Code Online (Sandbox Code Playgroud)
似乎问题取决于使用表达式为数组分配值 myArray[1][1] = "foo"
我对此感到困惑,因为我可以这样做:var myArray = []; myArray[4] = "foo"
这似乎表明可以在一维数组中的任意位置创建元素,但不能在二维数组中创建。
任何帮助澄清我的误解表示赞赏。
嗨,我在Java中使用迭代的Pascal三角形.到目前为止,一切都很好,直到行数超过13.输出有问题.我必须在这里做错事,请帮忙.
IterativePascal:
public class IterativePascal extends ErrorPascal implements Pascal {
private int n;
IterativePascal(int n) throws Exception {
super(n);
this.n = n;
}
public void printPascal() {
printPascal(false);
}
public void printPascal(boolean upsideDown) {
if (n == 0) { return; }
for (int j = 0; j <= n; j++) {
for (int i = 0; i < j; i++) {
System.out.print(binom(j - 1, i) + (j == i + 1 ? "\n" : " "));
}
}
}
public …
Run Code Online (Sandbox Code Playgroud) 为了解决一些问题,我需要计算pascal三角形的变体,其定义如下:
f(1,1) = 1,
f(n,k) = f(n-1,k-1) + f(n-1,k) + 1 for 1 <= k < n,
f(n,0) = 0,
f(n,n) = 2*f(n-1,n-1) + 1.
Run Code Online (Sandbox Code Playgroud)
对于给定的n,我想有效地得到第n行(f(n,1)... f(n,n)).另一个限制:f(n,k)如果> = 2 ^ 32则应为-1.
我的实施:
next :: [Int64] -> [Int64]
next list@(x:_) = x+1 : takeWhile (/= -1) (nextRec list)
nextRec (a:rest@(b:_)) = boundAdd a b : nextRec rest
nextRec [a] = [boundAdd a a]
boundAdd x y
| x < 0 || y < 0 = -1
| x + y + …
Run Code Online (Sandbox Code Playgroud) 由于某种原因,它曾经工作过.但现在我得到了一个SIGFPE .....出了什么问题?
#include "usefunc.h"
long factorial(long num) {
if (num > 1) {
long counter;
long fact = 1;
for (counter = num; counter > 0; counter--) fact *= counter;
return fact;
}
else return 0;
}
long combinations(long n, long k) {
return (factorial(n)) / (factorial(k)*factorial(n-k));
}
int main()
{
printf("How many rows of Pascal\'s triangle should I print?\t");
int rows = GetInteger();
long pArray[rows][rows];
int counter;
int counter2;
for (counter = 1; counter <= rows; counter++)
{
int …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Clojure中编写一个简洁,懒惰的Pascal三角形,旋转使得行/列跟随三角形的对角线.也就是说,我想生成以下lazy-seq的lazy-seq:
((1 1 1 1 ...)
(1 2 3 4 ...)
(1 3 6 10 ...)
...
)
Run Code Online (Sandbox Code Playgroud)
我写的代码是:
(def pascal
(cons (repeat 1)
(lazy-seq
(map #(map + %1 %2)
(map #(cons 0 %) (rest pascal)))
pascal
)))
Run Code Online (Sandbox Code Playgroud)
这样每一行都是通过将自身的右移版本添加到前一行来形成的.问题是它永远不会越过第一行,因为那时(map #(cons 0 %) (rest pascal)))
是空的.
=> (take 5 (map #(take 5 %) pascal))
((1 1 1 1 1))
Run Code Online (Sandbox Code Playgroud)
什么是解决这个问题的合理方法?我对Clojure中的编程很新,并且考虑到它涉及的问题的方式非常不同,所以我非常感谢任何有这方面经验的人的建议.
我已经设计了以下算法,使用二维数组确定二项式系数。例如,要计算 n 选择 k 的二项式系数,我们可以创建一个二维数组,如下所示:
int[][] arr = new int[n][k];
Run Code Online (Sandbox Code Playgroud)
我们可以通过以下方式填充数组:
for(int i = 0; i <= n; i++){
for(int j = 0; j <= minimum(i, k); j++){
if(j == 0 || i == j){
arr[i, j] = 1;
} else{
arr[i, j] = arr[i - 1, j - 1] + arr[i - 1, j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要重新设计该算法以使用索引 0-k 的一维数组。我很难确定如何做到这一点。我从小步开始,并意识到一些常见现象:
当我说 k …
我已经实现了 pascal 的三角形,但它有问题,因为col match { case row => ...}
它没有正确匹配 col 与行:
def main(args: Array[String]) {
println("Pascal's Triangle")
for (row <- 0 to 10) {
for (col <- 0 to row) {
val res: Int = pascal(col, row)
print(res + " ")
}
println()
}
def pascal(col: Int, row: Int): Int = {
col match {
case 0 => 1
case row => 1
case _ => pascal(col-1, row-1) + pascal(col, row-1)
}
}
Run Code Online (Sandbox Code Playgroud) 如何找到弗洛伊德三角中某个数字属于哪一行哪一列?\n\n 1\n 2 3\n 4 5 6\n 7 8 9 10\n11 12 13 14 15\n16 17 18 19 20 21\n22 23 24 25 26 27 28\n29 30 31 32 33 34 35 36\n37 38 39 40 41 42 43 44 45\n46 47 48 49 50 51 52 53 54 55\n
例如,
\n\n提前非常感谢!
\n一个leetcode问题:给定numRows,生成Pascal三角形的第一个numRows.
Leetcode接受了该算法的C++版本.谁能告诉我为什么这个Java版本无法被接受?
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (numRows == 0) return result;
List<Integer> raw = new ArrayList<Integer>();
raw.add(1);
result.add(raw);
if (numRows == 1) return result;
List<Integer> row = raw;
List<Integer> row2 = raw;
for (int i = 2; i <= numRows; i++) {
for (int j = 0; j < row.size()-1; j++)
row2.add(row.get(j) + row.get(j+1));
row2.add(1);
result.add(row2);
row = row2;
row2 = raw;
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在 Haskell 中实现 Pascal Triangle,但代码没有以正确的方式工作。该代码又给出了 1 行。我也试图像树一样打印结果,但这对我来说很困难和困惑,所以我没有添加打印代码。
这些是我得到的结果:
*Main> pascal 1
[[1],[1,1]]
*Main> pascal 2
[[1],[1,1],[1,2,1]]
Run Code Online (Sandbox Code Playgroud)
预期输出:
*Main> pascal 2
[[1],[1,1]]
Run Code Online (Sandbox Code Playgroud)
理想输出:
*Main> pascal 3
1
1 1
1 2 1
Run Code Online (Sandbox Code Playgroud)
这是代码:
choose n 0 = 1
choose 0 k = 0
choose n k = choose (n-1) (k-1)* n `div` k
pascal :: Integer -> [[Integer]]
pascal 0 = [[1]]
pascal m = pascal (m - 1) ++ [[choose m k | k <- [0,1..m]]]
Run Code Online (Sandbox Code Playgroud) 我在很多网站上搜索过,但是找不到以下pascal三角形的确切输出.任何人都可以帮助我如何获得以下输出.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个函数,给定一个行和一列,将计算Pascal三角形中该位置的值.
val = GetPasVal(3, 2); // returns 2
Run Code Online (Sandbox Code Playgroud)
所以我在这里指定第3行第2列,如您所见:
1
1 1
1 2 1
Run Code Online (Sandbox Code Playgroud)
......应该是2.