如何用javascript写一个阶乘并解释它的原理?

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

console.log(factorial(5)); // 输出 120

这个函数使用了递归的方法来计算阶乘。递归是一种函数调用自身的方法。在这个函数中,如果输入参数 n 为0,函数会返回1。如果 n 不为0,函数会返回 n 与 factorial(n-1) 的乘积。

例如,当 n 为5时,函数会执行以下步骤:

  1. factorial(5) 调用 factorial(4),并将结果与5相乘。
  2. factorial(4) 调用 factorial(3),并将结果与4相乘。
  3. factorial(3) 调用 factorial(2),并将结果与3相乘。
  4. factorial(2) 调用 factorial(1),并将结果与2相乘。
  5. factorial(1) 调用 factorial(0),并将结果与1相乘。
  6. factorial(0) 返回1。
  7. factorial(1) 返回1 * 1 = 1。
  8. factorial(2) 返回2 * 1 = 2。
  9. factorial(3) 返回3 * 2 = 6。
  10. factorial(4) 返回4 * 6 = 24。
  11. factorial(5) 返回5 * 24 = 120。

这个函数的原理是将阶乘问题分解成更小的子问题,直到问题的规模变得足够小,可以直接得到答案。在这个例子中,我们把计算 factorial(n) 的问题,分解成计算 factorial(n-1) 的问题,然后再乘以 n。递归函数会一直调用自身,直到问题规模减小到可以直接得到答案,即 factorial(0) 返回1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值