当前位置:首页 > JavaScript

js循环实现杨辉三角

2026-03-02 00:55:17JavaScript

实现杨辉三角的 JavaScript 方法

使用双重循环

通过双重循环生成杨辉三角的每一行,外层循环控制行数,内层循环计算当前行的数值。

function generatePascalTriangle(numRows) {
  const triangle = [];
  for (let i = 0; i < numRows; i++) {
    const row = [];
    for (let j = 0; j <= i; j++) {
      if (j === 0 || j === i) {
        row.push(1);
      } else {
        row.push(triangle[i - 1][j - 1] + triangle[i - 1][j]);
      }
    }
    triangle.push(row);
  }
  return triangle;
}
console.log(generatePascalTriangle(5));

使用递归

递归方法通过调用自身生成杨辉三角的每一行,直到达到指定行数。

js循环实现杨辉三角

function generatePascalTriangleRecursive(numRows) {
  if (numRows === 0) return [];
  if (numRows === 1) return [[1]];
  const prevRows = generatePascalTriangleRecursive(numRows - 1);
  const lastRow = prevRows[prevRows.length - 1];
  const currentRow = [1];
  for (let i = 1; i < lastRow.length; i++) {
    currentRow.push(lastRow[i - 1] + lastRow[i]);
  }
  currentRow.push(1);
  prevRows.push(currentRow);
  return prevRows;
}
console.log(generatePascalTriangleRecursive(5));

优化空间复杂度

通过复用数组空间减少内存占用,仅使用一个数组存储当前行。

js循环实现杨辉三角

function generatePascalTriangleOptimized(numRows) {
  const triangle = [];
  let prevRow = [];
  for (let i = 0; i < numRows; i++) {
    const currentRow = [];
    for (let j = 0; j <= i; j++) {
      if (j === 0 || j === i) {
        currentRow.push(1);
      } else {
        currentRow.push(prevRow[j - 1] + prevRow[j]);
      }
    }
    triangle.push(currentRow);
    prevRow = currentRow;
  }
  return triangle;
}
console.log(generatePascalTriangleOptimized(5));

格式化输出

将生成的杨辉三角格式化为字符串,便于在控制台显示为三角形。

function printPascalTriangle(numRows) {
  const triangle = generatePascalTriangle(numRows);
  const maxWidth = triangle[triangle.length - 1].join(' ').length;
  triangle.forEach(row => {
    const rowStr = row.join(' ');
    const padding = ' '.repeat((maxWidth - rowStr.length) / 2);
    console.log(padding + rowStr);
  });
}
printPascalTriangle(5);

使用组合数公式

直接利用组合数公式计算杨辉三角的每个值,适用于数学场景。

function factorial(n) {
  if (n <= 1) return 1;
  return n * factorial(n - 1);
}

function generatePascalTriangleCombination(numRows) {
  const triangle = [];
  for (let i = 0; i < numRows; i++) {
    const row = [];
    for (let j = 0; j <= i; j++) {
      row.push(factorial(i) / (factorial(j) * factorial(i - j)));
    }
    triangle.push(row);
  }
  return triangle;
}
console.log(generatePascalTriangleCombination(5));

以上方法提供了多种实现杨辉三角的方式,可根据需求选择适合的方法。

标签: 杨辉三角js
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…