gpt4 book ai didi

java - 递归算法中的奇怪行为,

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:09 24 4
gpt4 key购买 nike

作为编程 101 类(class)的一部分,我正在编写一个递归算法来计算 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方法它应该打印出多少斐波那契数。当ì等于 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 循环。

关于java - 递归算法中的奇怪行为,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28455798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com