作为编程101课程的一部分,我正在编写一个递归算法来计算Java中的斐波那契数。这是代码:
public class Fib {
public static void main(String[] args) {
Fib fib = new Fib();
}
public Fib() {
int end = 9;
long[] nums = new long[2];
printFib(0, end, nums);
}
private void printFib(int i, int end, long[] nums) {
while(i < end) {
if(i == 0 || i == 1) {
nums[i] = 1;
System.out.println("1");
} else {
long fib;
fib = 0;
fib += (nums[0] + nums[1]);
nums[0] = nums[1];
nums[1] = fib;
System.out.println(fib);
}
i++;
printFib(i, end, nums);
}
}
}
当我逐步执行程序时,它一直按预期运行,直到i
等于为止end
,该变量告诉printFib
方法应打印多少斐波那契数。当ì
equal等于end
while(i < 1)
按预期返回false并且程序转到最后一个时}
,现在您希望程序返回我最初调用该函数的构造函数,并且该程序应该退出,但事实并非如此。程序返回while语句,并以某种方式再次返回false。然后它再次执行相同的操作,只是第二次它减少i
1(什么?!),然后else
在到达if语句时继续执行该子句。然后,它一遍又一遍地重复做同样的事情i
在1到2之间。我已经问过我的老师这个问题,他无法解释。
如果我将程序替换为while
,该程序将完全按照我的预期工作,if
所以也许while
我不了解某些内容。
编辑因此,我现在意识到,每次调用i
该方法时,都会存储一个不同的值,并且当该方法退出并i
=时end
,程序将返回到以前的调用中,而我具有一个不同的值。
您实现了一个迭代算法来计算斐波那契数列。这就是while循环的作用。最后,进行递归调用没有意义printFib(i, end, nums)
。
如果您打算递归实现,则不需要整个while循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句