以下引号是我的实际作业,下面是我当前的代码。有人能指出我正确的方向。
编写一个名为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;
}
答案 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