function getSequence(arr) { let maxLength = 0; // 记录最长递增子序列的长度 let longetSeq = []; // 记录最长递增子序列 /** * * @param {*} index 列表的下标 * @param {*} subSeq 当前递增子序列 */ function findSubsequence(index, subSeq) { let currentNum = arr[index]; // 当前元素 // 先把之前的递增子序列展开,再加上当前元素 let newSeq = [...subSeq, currentNum]; // 新的递增子序列 // 遍历下标之后的内容 for (let i = index + 1; i < arr.length; i++) { // 遍历当前下标之后的元素时,发现有比当前元素大的元素 if (arr[i] > currentNum) { findSubsequence(i, newSeq); } } // 每一次递归结束后,就会得到一个新的递增子序列 // 相当于找到了所有的递增子序列 // console.log("newSeq:", newSeq); if (newSeq.length > maxLength) { maxLength = newSeq.length; longetSeq = newSeq; } } for (let i = 0; i < arr.length; i++) { findSubsequence(i, []); } return longetSeq; } const list = [2, 1, 5, 3, 6, 4, 8, 9, 7]; const result = getSequence(list); console.log(result);