简化了THIS fibonacci方法



所以我的工作是转换这个方法:

long fib(long n) {
long i = -1, a = 0, b = 1;
while (++i != n)
b = a + (a = b);
return a;
}

到另一个迭代fibonacci方法中,该方法仍然执行完全相同的操作,只是新方法只允许包含简单的指令/赋值(但在这种情况下也允许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(。因为如果可以只使用旧的变量,那会更好,但我不知道怎么做。

我之所以这么问,是因为在下一步中,我需要找到这个方法的循环不变量,我认为如果我只拥有给定的变量,而不添加新的变量,这会更容易。(我想不太确定(。

提前Thx。

好的,所以你想保留第一个方法(fib1(中的所有旧变量,然后:

public static long fib3(long n){
long i = 0;
long a = 0;
long b = 1;
while (i != n){
b += a;
a = b - a;//since now b(the variable) is a + b, and a + b - b = a
i++; 
}
return a;
}

或在回路中:

public static long fib3(long n){
long a = 0;
long b = 1;
for(long i = 0;i<n;i++){
b += a;
a = b - a;//since now b(the variable) is a + b, and a + b - b = a
}
return a;
}

最新更新