【问题标题】:Recursive method in Java that calculates factorials not workingJava中计算阶乘的递归方法不起作用
【发布时间】:2013-09-18 15:13:30
【问题描述】:

在 Java 中编写一个计算阶乘的递归方法。不幸的是,它不起作用,我怀疑这是因为我不太确定的 2 个参数 - 我用星号括起来。这些是属于那里的正确参数吗?或者我需要将它们更改为其他内容吗?为什么?

public fact(n)
{
   return this.factHelp(n, ***n+1*** );
}

private factHelp(n, result)
{
   if (n == 0)
      return result;
   else
      return this.factHelp(n – 1, ***result***);
}

【问题讨论】:

  • 为什么不调试一下看看呢?
  • @user2777815 人确实发明了打印语句
  • 想想你在做什么。什么时候有更改结果?你只是不断地把它传回去。结果必须发生一些事情/
  • @Cruncher 我对编程还很陌生。不太清楚如何使用打印语句进行调试..
  • @Cruncher 有点意思。我必须继续从结果中减去 1 吗?

标签: java math methods recursion factorial


【解决方案1】:

此代码无法编译。

  1. 您缺少这两种方法的返回类型。您应该使用 public int fact... 而不是 public fact...
  2. 您的参数没有类型。它可能应该是 fact(int n) 而不是 fact(n)
  3. 您不需要两个函数来执行此操作。如果你愿意,你可以使用两个,但我只是想让你知道这是不必要的。
  4. 您可能应该在 Google 上搜索“递归阶乘算法”以获得更多帮助。

【讨论】:

  • 我从未听说过“TCO 变体”这个短语,而提出这个问题的人可能也没有听说过。你能详细说明一下吗?
  • 它可以更容易地设置初始调用条件(来自外部代码)。
  • 我错了。这是这样写的(与添加到方法的返回相比)。但是,请参阅之前的评论 - 我认为在这里使用两种方法更好,因为它隐藏了内部。
  • @user2246674 坦率地说,在真实的场景中,我只会使用迭代。为什么要使用堆栈空间?
  • @Cruncher 因为“不预先优化”。
猜你喜欢
  • 1970-01-01
  • 2015-04-19
  • 2017-04-19
  • 2015-01-08
  • 2016-01-28
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 2020-02-10
相关资源
最近更新 更多