杨辉三角算法

杨辉三角

迭代方式实现的 pascalTriangle,递归方式实现的 pascalTriangleRecursive

  • pascalTriangle 函数

/**
 * @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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值