杨辉三角
迭代方式实现的 pascalTriangle,递归方式实现的 pascalTriangleRecursive
/**
* @param {number} lineNumber - 行号,从零开始。
* @return {number[]} 生成的杨辉三角的指定行。
*/
function pascalTriangle(lineNumber) {
const currentLine = [1]; // 初始化当前行,第一个元素为 1。
const currentLineSize = lineNumber + 1; // 当前行的大小(元素数量)。
// 使用迭代方式计算当前行的元素。
for (let numIndex = 1; numIndex < currentLineSize; numIndex += 1) {
currentLine[numIndex] = (currentLine[numIndex - 1] * (lineNumber - numIndex + 1)) / numIndex;
}
return currentLine; // 返回生成的杨辉三角的指定行。
}
-
currentLine 是一个数组,用于存储当前行的元素。
-
currentLineSize 存储当前行的大小(元素数量)。
-
使用 for 循环迭代计算当前行的元素。每个元素都基于前一个元素计算,按照杨辉三角的规则进行计算。
-
示例
const lineNumber = 5; // 例如,要生成第 5 行的杨辉三角。
const triangleRow = pascalTriangle(lineNumber);
// 打印生成的杨辉三角的指定行。
console.log(triangleRow); // 输出:[1, 5, 10, 10, 5, 1]
-
pascalTriangleRecursive
函数
/**
* @param {number} lineNumber - 以零为基准的行号。
* @return {number[]} 生成的杨辉三角的指定行。
*/
function pascalTriangleRecursive(lineNumber) {
if (lineNumber === 0) {
return [1];
}
const currentLineSize = lineNumber + 1;
const previousLineSize = currentLineSize - 1;
// 创建容器以存储当前行的值。
const currentLine = [];
// 我们将基于前一行计算当前行。
const previousLine = pascalTriangleRecursive(lineNumber - 1);
// 遍历除第一个和最后一个元素以外的当前行的所有元素
// (因为它们在前一行和后一行中都是 1),并基于前一行计算当前系数。
for (let numIndex = 0; numIndex < currentLineSize; numIndex += 1) {
const leftCoefficient = (numIndex - 1) >= 0 ? previousLine[numIndex - 1] : 0;
const rightCoefficient = numIndex < previousLineSize ? previousLine[numIndex] : 0;
currentLine[numIndex] = leftCoefficient + rightCoefficient;
}
return currentLine;
}
-
pascalTriangleRecursive 函数是一个递归函数,用于生成杨辉三角的指定行。
-
当 lineNumber 为 0 时,函数返回一个只包含一个元素 1 的数组,表示杨辉三角的第一行。
-
对于其他行,函数通过递归调用自身来生成当前行。
-
在递归的过程中,函数首先计算前一行的元素,并存储在 previousLine 中。
-
然后,函数遍历当前行的所有元素,根据杨辉三角的规则计算每个元素的值,并存储在 currentLine 中。
-
示例
const triangleRows = pascalTriangleRecursive(4);
// 打印生成的杨辉三角的指定行。
console.log(triangleRows); // 输出:[1, 4, 6, 4, 1]