【发布时间】:2021-04-19 01:49:24
【问题描述】:
所以我的工作是转换这种方法:
long fib(long n) {
long i = -1, a = 0, b = 1;
while (++i != n)
b = a + (a = b);
return a;
}
进入另一个迭代斐波那契方法,它仍然完全一样,只是新方法只允许包含简单的指令/分配(但在这种情况下也允许使用 while 循环)。
所以我做了这个方法:
public static long fib2(long n){
long i = 0;
long a = 0;
long b = 1;
while (i != n){
long oldA = a;
a = b;
b = oldA + a;
++i;
}
return a;
}
我现在的问题是:是否可以简化方法并且仍然只保留第一种方法中的所有旧变量(n、i、a、b)还是我必须创建一个新变量(在我的情况下是 oldA ) 所以。因为如果可以只用旧变量来做,那会更好,但我不知道怎么做。
我问这一切是因为在下一步中我需要找到此方法的循环不变量,我认为如果我只有给定的变量而不添加新的变量会更容易。 (我认为不确定)。
提前致谢。
【问题讨论】:
-
你需要提供一个例子来描述
simplify你的意思。我不认为fib2比fib1更简单。 -
所以你想要一个除了不像
fib1并且不想创建新变量的方法吗? -
基本上我认为这意味着应该只允许一行做一件事。 Lke f.ex.增加某事或进行比较等,但不能两者兼而有之
-
@EgZoShift 好的,看我的回答
-
是的,我看到了,非常感谢。已经有了 b+= a 部分,但之后我不知道如何将 a 设置为正确的值
标签: java loops iteration fibonacci loop-invariant