作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 for 循环,调用 fibonacci 方法并打印 fibonacci 序列中的前 25 个数字。问题是我对如何正确地做到这一点有点困惑。
我有点困惑,当 run 方法中的 for 循环调用 fibonacci 方法时,fibonacci 方法内的值在 for 循环到达传递后是否会重置?例如,在 for 循环的第一遍期间,i = 0 并且 int a 和 int b 的值在斐波那契方法内部发生变化。斐波那契方法中的值是否会在下一次循环时重置?
import acm.program.*;
public class Fibonacci extends ConsoleProgram{
private void run(){
for(int i = 0; i <= 25; i++){
fibonacci(i);
println(fibonacci(i));
}
}
private int fibonacci(int n){
int n = 0;
int a = 0;
int b = 1;
while (n < 25);
int c = a + b;
a = b;
b = c;
}
return(a);
}
最佳答案
您在两个不同的地方循环 - run()
和 fibonacci()
。其中只有一个地方应该关心循环,另一个地方应该关心计算 Fibonacci(n)。
我们可以做的就是从fibonacci
中删除循环,而只依赖外部的循环。另外,我们将删除该语句 int n = 0
,因为它会隐藏您传入的参数。
最后,我们将创建两个新的静态变量 a
和 b
,以便在此实例中保留这些变量的值。如果您不这样做,那么您就必须依靠递归或其他一些方法来提供 a
和 b
的适当值。
我不完全确定为什么需要扩展 ConsoleProgram
,但我暂时将其保留。
所以,它应该是这样的。
public class Fibonacci extends ConsoleProgram {
static int a = 0;
static int b = 1;
public void run() {
for(int i = 0; i <= 25; i++) {
// Print the call to fibonacci(i) with every iteration.
}
}
private int fibonacci(int n) {
int c = a + b;
a = b;
b = c;
return c;
}
}
关于java - 编写斐波那契数列的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390921/
我是一名优秀的程序员,十分优秀!