家庭作业再次请求帮助。递归地乘以Evens?

时间:2012-04-19 00:37:37

标签: java math recursion

以下引号是我的实际作业,下面是我当前的代码。有人能指出我正确的方向。

  

编写一个名为multiplyEvens的递归方法,它返回第一个n的乘积   甚至是整数。例如,multiplyEvens(1)返回2,multiplyEvens(4)返回384   (因为2 * 4 * 6 * 8 = 384)。如果传递的值小于1,则抛出IllegalArgumentException。

  private static int multiplyEvens(int n)
  {  
      if(n%2 == 0)
      {           
          System.out.println(n*n);
          return multiplyEvens(n*n);
                      // I'm lost
      }
      System.out.println();
      return n; 
  }

6 个答案:

答案 0 :(得分:5)

尝试在n-1而不是n * n上进行递归,看看是否可以弄清楚multiplyEvens(n)的值与multiplyEvens(n-1)的关系。也许这会给你一个正确方向的开始。

答案 1 :(得分:5)

在纸上谈谈。

从n = 1开始

1%2 = 1 so you don't do into your loop, and return value = 1 (wrong)

尝试n = 2

2%2 = 0, so you go into your loop and call multiplyEvens(2*2)
4%2 = 0, so you go into your loop and call multiplyEvens(4*4)
16%2 = 0 ...

到现在为止,您应该开始了解至少一个问题的方法......

答案 2 :(得分:3)

任何可以递归完成的事情都可以迭代完成。可以这样想:当你编写for循环时,在确定你正在处理的任何值的奇偶校验(偶数/奇数)值之前,你需要有一个额外的值,最多n。 / p>

由于这是家庭作业,这是一个广泛的中风:

  • 您的递归条件可能需要两个参数而不是一个。
  • 您应该将值乘以一些值i <=n

你大部分都在那里。

答案 3 :(得分:1)

你应该倒退。即,在每次递归调用时,返回(2 * n)*递归调用,减少n。基本情况是当n = 1时,函数简单地返回2而不将它与另一个递归调用相乘(为了实现你需要为n <1抛出的IllegalArgumentException)。

答案 4 :(得分:0)

乘法平均与
相同 2 ^ n * n!
你所要做的就是google 阶乘递归java

答案 5 :(得分:0)

你走了:

public static void main(String[] args) {
    System.out.println(multiplyEvens(4));
}

private static int multiplyEvens(int n) {
    if(n < 1) throw new IllegalArgumentException("Value less than 1 not supported");
    else if(n == 1) return 2;
    else return multiplyEvens(n-1) * (n*2);
}

这里是递归算法的基础知识。您必须假设您已为n-1计算结果。然后返回调整为n的n-1的结果。 (也就是说,你乘以第n个偶数,n * 2)。递归方法调用完成剩下的工作,它反过来假定它已经计算了n-2的值等等......直到n == 0,结果为1