微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阶乘递归,答案在纸上没有意义?

如何解决阶乘递归,答案在纸上没有意义?

所以我当时正在codingbat上做递归练习,而我遇到了这个

  public int factorial(int n) {
  if (n == 1) {
    return 1;
  }
  return n * factorial(n-1);
}

我不明白这在纸上如何工作。因为1返回1多数民众赞成在罚款,2返回2多数民众赞成在罚款,3返回6多数民众赞成在罚款,但然后factorial(4)返回24? factorial(5)返回120?

这是没有意义的,因为它是从我假设但不减1的n的最后一个答案开始的?但通过所有测试。那么6 * 4 = 24,而不是不等于24的4x(n-1)呢?帮助吗?

解决方法

对于任何阶乘(n),其计算公式为n x(n-1)x(n-2)x ... x 1

因此对于阶乘(4),它将为4 x 3 x 2 x 1 = 24

主要以阶乘为例介绍递归,因此可视化看起来像

fact(4) = 4 x fact(3)
        = 4 x 3 x fact(2)
        = 4 x 3 x 2 x fact(1)
        = 4 x 3 x 2 x 1 = 24

重复执行递归,直到到达“ anchor”(这是1的基本情况)为止

,

当您试图理解递归时,最好将堆栈描绘出来。每次调用return n * factorial(n - 1)时,我们都会将值压入堆栈,以便在计算完factorial(n - 1)调用后可以检索它。依此类推。

factorial(5)
= 5 * factorial(4)
= 5 * 4 * factorial(3)
= 5 * 4 * 3 * factorial(2)
= 5 * 4 * 3 * 2 *factorial(1)
= 5 * 4 * 3 * 2 * 1
= 120 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。