编辑代码

// function fn(totalLaps) {
//   const plans = [];

//   for (let i = 1; i <= totalLaps; i++) {
//     for (let j = i; j <= totalLaps; j++) {
//       for (let k = j; k <= totalLaps; k++) {
//         if (i + j + k === totalLaps) {
//           plans.push([i, j, k]);
//         }
//       }
//     }
//   }
//   return plans;
// }

// const totalLaps = 20;
// const plans = fn(totalLaps);


// for (let i = 0; i < plans.length; i++) {
//   console.log(`${i + 1}. ${plans[i].join(', ')}`);
// }


// function findWays(target, last, currentPlan) {
//     if (target === 0) {
//         console.log(currentPlan.join(", "));
//         return;
//     }

//     for (let i = last + 1; i <= target; i++) {
//         findWays(target - i, i, [...currentPlan, i]);
//     }
// }

// findWays(20, 0, []);

function fn(sum,last,arr){
    if(sum==0){
        console.log(arr.join(' '))
        return
    }

    for(let i=last +1;i<=20;i++){
        fn(sum-i,i,[...arr,i])
    }
}

fn(20,0,[])


//sum 是剩余的圈数
//last 上一次跑的圈数
//arr 记录合适方案