我无法将此递归方法(recP)转换为使用循环(itP)的方法。
public class Main {
public static int recP(int n) {
if (n <= 2)
return 1;
else
return (recP(n - 3) * recP(n - 1)) + 1;
}
public static int itP(int n) {
if (n <= 2)
return 1;
else
//do something
}
public static void main(String[] args) {
System.out.println(Main.recP(6)); //returns 9
System.out.println(Main.itP(6)); //should return 9
}
-
如果我是手动执行此操作,使用递归公式计算recP(6),我会列出工作步骤并填写缺失的详细信息:
P6 = (P3 X P5)+ 1 = (2 X 4) + 1 = 9
P3 = (P0 X P2) + 1 = 2
P5 = (P2 X P4) + 1 = (1 X P4) + 1 = 4
P4 = (P1 X P3) + 1 = (1 X 2) + 1 = 3
-
我知道循环应该放在方法的else部分,但是我不知道循环是如何工作的。无法找出计算recP / itP的公式。 会很感激一些指导。
答案 0 :(得分:1)
你需要记住&#34;您计算的三个最近的值,并使用它们来计算当前值:
public static int itP(int n) {
if (n <= 2) {
return 1;
}
int n3 = 1;
int n2 = 1;
int n1 = 1;
for (int i = 3; i <= n; i++) {
int m = n3 * n1 + 1;
n1 = n2;
n2 = n3;
n3 = m;
}
return n3;
}