斐波那契数列

来源:互联网 发布:百度云用数据上传慢 编辑:程序博客网 时间:2024/06/05 03:01

九度OJ1387 http://ac.jobdu.com/problem.php?pid=1387
剑指offer面试题9

思路分析

主要有两个要点:第一,加一个数组作为缓存,来减少重复计算次数,并且防止递归太多导致栈溢出;第二,注意计算结果不能是int型的,是long型的。

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StreamTokenizer;public class Main {    private long fac(int n) {        // n的范围为[0, 70]        long[] dp = new long[71];        dp[0] = 1;        dp[1] = 1;        for (int i = 2; i < n; ++i) {            dp[i] = dp[i - 1] + dp[i - 2];        }        return dp[n - 1];    }    public static void main(String[] args) throws IOException {        Main M = new Main();        StreamTokenizer st = new StreamTokenizer(new BufferedReader(                new InputStreamReader(System.in)));        while (st.nextToken() != StreamTokenizer.TT_EOF) {            int n = (int)st.nval;            System.out.println(M.fac(n));        }    }} // class/**************************************************************    Problem: 1387    User: buptxxz    Language: Java    Result: Accepted    Time:70 ms    Memory:14640 kb****************************************************************/
0 0