在版上看到的一道题:
写一个fibonacci数的生成器,每次调用生成下一个fibonacci数
例如,第一次调用getNext()生成0,第二次调用getNext()生成1,第三次调用getNext()生成1,第四次调用getNext()生成2。。。。
还要求有一个reset()来归0
本来想用fib数的公式fib(n) = fib(n-1) + fib(n-2) 维持一个数组在类里面,然后有一个count累计目前第几位数
后来想了一下,其实维持2个变量就可以了,a代表fib(n-2), b代表 fib(n-1)
每次运算的时候
int tmp = a;
a = b;
b = tmp + a;
return b;
就可以了,当然要注意前两次返回的值
Java实现了一下
public class FibGenerator {
int a;
int b;
static int count;
public FibGenerator(){
a = 0;
b = 1;
count = 0;
}
public int getNext(){
if (count==0) {count++; return 0;}
if (count==1) {count++; return 1;}
int tmp = a;
a = b;
b = tmp + a;
count++;
return b;
}
public void clear(){
a = 0;
b = 1;
count = 0;
}
//Test
public static void main(String[] args){
FibGenerator fib = new FibGenerator();
int A1 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + A1);
int A2 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + A2);
int A3 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + A3);
int A4 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + A4);
int A5 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + A5);
int A6 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + A6);
fib.clear();
System.out.println("The fib number has been reset");
int B1 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + B1);
int B2 = fib.getNext();
System.out.println("The No."+ count +" fib number is --->" + B2);
}
}
有更好的方法欢迎留言