题意及思路
- 题意:递归调用,套用公式即可。
- 原有思路:直接贴个代码吧,简单明了。
private static long solve(int n) { if(n<=1) return n; return solve(n-1)+solve(n-2); }
- 改进点:
- 踩坑点:大概到四十六之后的数列值将会超出int数值范围。所以要用一个较大范围的基本数据类型,我这里使用的是long。
代码
import java.util.Scanner; public class Main{ private static long ans[] = new long[55]; public static void main(String[] args) { Scanner in = new Scanner(System.in); int n; long ans; while(in.hasNext()){ n = in.nextInt(); if(n==-1) break; ans = solve(n); System.out.println(ans); } in.close(); } private static long solve(int n) { if(n<=1) return n; if(ans[n]!=0) return ans[n]; return ans[n] = solve(n-1)+solve(n-2); } }