💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
>[danger] 什么是杨辉三角 --- > 二维数组结构, i行, 第j个的值, 为[i - 1][j - 1] + [i- 1][j] 的值 --- 是一种数学上的排列组合, 看图 ![](https://img.kancloud.cn/cd/da/cdda14e9ff3526e4ae2439ced4751be0_541x317.png) >[danger]打印n行杨辉三角 --- 想清楚用什么样的数据结构来组织数据 1. 二维数组, 装载全是1的同结构的数据 ![](https://img.kancloud.cn/5e/bd/5ebde133992931eb06067df085ddd578_306x159.png) ~~~ let arr = []; for (let i = 0; i < 10; i++){ let brr = []; for (let j = 0; j <= i; j++){ brr.push(1); } arr.push(brr); } ~~~ 2. i代表行数, j代表个数, 根据规律知道.j的位置的值, 等于[ i - 1 ] [ j - 1 ] + [ i - 1 ][ j ] 2个位置值的和, 所以代码如下 ~~~ let arr = []; for (let i = 0; i < 10; i++){ let brr = []; for (let j = 0; j <= i; j++){ brr.push(arr[i - 1][j - 1] + arr[i - 1][j]); // 这里 } arr.push(brr); } ~~~ 3. 上面报错了, 因为i为0时, 减去1成负数了, 所以顶部和开头和末尾都固定是1 ~~~ let arr = []; for (let i = 0; i < 10; i++){ let brr = []; for (let j = 0; j <= i; j++){ if (j === 0 || i === j) { // 开头和末尾符合条件 brr.push(1); } else { brr.push(arr[i - 1][j - 1] + arr[i - 1][j]); } } arr.push(brr); } ~~~ ![](https://img.kancloud.cn/53/ca/53ca5c3ed2881c79c3970ff7ab3114c6_354x162.png) >[danger] 第m行, 第n个位置的值 ---- 思路看图: ![](https://img.kancloud.cn/99/fd/99fd119be3ca7616ae635b28e7181f7e_260x240.gif) > 每次调用方法, 求 [ i - 1 ] [ j - 1 ] + [ i - 1 ][ j ] 的结果, 当遇到m === 1或者 n === m, 直接返回1即可 (为什么是1, 因为这次从1开始数, 而非数组下标0) ~~~ function fn(n, m) { // n行数, 第m个 if (m === 1 || n === m) { // m为开头的肯定是1, n和m相等为最后一个元素为1 return 1; } else { return fn(n - 1, m - 1) + fn(n - 1, m); } } console.log(fn(7, 5)); // 15 ~~~