问题描述:
写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:
问题分析
我们对函数进行分段处理,当n<2时,第一项等于0.第二项等于1。当n大于2时:
fn=fone+ftwo
; 第n项等于前两项的和
fone=ftwo
; 把第n-2项赋值给n-1项
ftwo=fn
;把第n项赋值给n-1项。然后利用循环就可以求出指定的每一项
算法实现:
import java.util.Scanner;
public class Main {
static long aLong(int n){
int[] result={0,1};
if(n<2){
return result[n];
}
long fone=0;
long ftwo=1;
long fn=0;
for(int i=2;i<=n;i++){
fn=fone+ftwo;
fone=ftwo;
ftwo=fn;
}
return fn;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入n:");
int n=sc.nextInt();
long fn= aLong(n);
System.out.println(fn);
}
}
测试:
1.测试用例 n=14
:
结果:233
2.测试用例 n=1
结果:0
小结:
时间复杂度为O(n),比较可观,比递归函数有效。