/**
* 暴力递归
*/
import java.util.*;
public class Fib1 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int []arr = new int[n+1];
System.out.println(help(arr,n));
}
static int help(int[] arr,int n){
if(n == 0||n==1){
return n;
}
else{
arr[n] = help(arr,n-1)+help(arr,n-2);
return arr[n];
}
}
}
带备忘录的递归
/**
* 带有备忘录的递归
*/
import java.util.*;
public class Fib2 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int []arr = new int[n+1];
System.out.println(help(arr,n));
}
static int help(int[] arr,int n){
if(n == 0||n==1){
return n;
}
if(arr[n] != 0){ //其值不等于原始值0,则说明这个数已经运算出结果了(f(0)不用考虑)
return arr[n];
}
arr[n] = help(arr,n-1)+help(arr,n-2);
return arr[n];
}
}
迭代法
/**
* 迭代法
*/
import java.util.*;
public class Fib3 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int []arr = new int[n+1];
arr[0] = 0;
arr[1] = 1;
for(int i = 2;i<arr.length;i++){
arr[i] = arr[i-1] + arr[i-2];
}
System.out.println(arr[n]);
}
}
滚动更新
/**
* 滚动更新
*/
import java.util.*;
public class Fib4 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if(n == 0||n==1){
System.out.println(n);
}
int a = 0;
int b = 1;
int c = 0;
for(int i = 2;i<=n;i++){
c = a + b;
a = b;
b = c;
}
System.out.println(c);
}
}