问题:求解斐波那契数列的第n项
思路: 找出状态转移方程:f(n)=f(n-1)+f(n-2)
-
朴素的递归,利用栈的数据结构,自顶向下地求出
import java.util.Scanner; public class hello{ public static void main(String[] args){ Scanner myscanner=new Scanner(System.in); MyTool mytool=new MyTool(); int n=myscanner.nextInt();//输入正整数n,求解斐波那契数列的第n项 int ca=mytool.test2(n); System.out.print(ca); } } class MyTool{ public int test2(int n){ if(n==1 || n==2){//递归终止条件:当n为1或n为2时,返回斐波那契数列的第一项1或第二项1 return 1; } return test2(n2-1)+test2(n2-2); } }
- 利用数组存储结果,按顺序从1至n迭代,从前向后地求出斐波那契数列第n项
import java.util.Scanner;
public class hello{
public static void main(String[] args){
Scanner myscanner=new Scanner(System.in);
MyTool mytool=new MyTool();
int n=myscanner.nextInt();
int ca=mytool.test(n);
System.out.print(ca);
}
}
class MyTool{
public int test(int n){
int arr[]=new int[n+1];
arr[1]=1;//初始化数列的第一项
arr[2]=1;//初始化数列的第二项
if(n==1){
return arr[1];//n==1
}else if(n==2){
return arr[2];//n==2
}else if(n>2){
for(int i=3;i<=n;i++){
arr[i]=arr[i-1]+arr[i-2];//利用状态转移方程,从前到后求出数列的下一项
}
}
return arr[n];//n>2
}
}