我有递归函数:
public static int fRek(int n) {
if (n <= 0)
return 1;
else if (n == 1)
return 2;
else
return 3 * fRek(n-2)-3;
}
问题:如何在迭代中编写它?循环? 我有这个:
public static int fIter(int a) {
int b = 1 ;
if (a <= 0) return 1;
else if (a == 1) return 2;
for (int i = 1; i <= a; i = i+2) {
b = b * 3;
b = b - 3;
}
return b;
}
}
但它仅适用于偶数:a = 4,6,8,... 对于奇数,它无法正常工作,我不知道为什么
最佳答案
对于偶数,您的第二个算法将不起作用,因为在第一段代码中,该函数返回 2
如果n == 1
:
else if (n == 1)
return 2;
在你的第二个算法中,如果输入参数 a
很奇怪,for 循环最终会将其减少到 1
而不是0
,从而使用 b=1
进行计算是不正确的。您应该使用b=2
在 a
的情况下是奇怪的,并使用 b=1
在 a
的情况下保持均匀。
此外,您应该使用 i=1
中的 for 循环而a
是奇怪的并且 i=2
而a
保持均匀。
关于java - 从递归到迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548762/