zoukankan      html  css  js  c++  java
  • 斐波那契数列

    题目描述:写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下: n=0,f(n)=0 ;n=1,f(n)=1 n>1;f(n)=f(n-1)+f(n-2).

    package Problem9;
    
    public class Fibonacci {
        /*
         * 题目描述: 写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下: n=0,f(n)=0 n=1,f(n)=1
         * n>1;f(n)=f(n-1)+f(n-2)
         */
    
        /**
         * @param args
         */
        // 解法1:用递归解决,但是存在很严重的效率问题,做了很多次的重复计算
        public static int Fib1(int n) {
            if (n == 0) {
                return 0;
            } else if (n == 1) {
                return 1;
            } else {
                return Fib1(n - 1) + Fib1(n - 2);
            }
    
        }
    
        // 解法2:时间复杂度为O(n),从下向上计算,保存已经计算过的数值,避免重复计算
        public static long Fib2(int n) {
            long FibOne = 0;
            long FibTwo = 1;
            long FibN = 0;
            int result[] = { 1, 2 };
            if (n < 2) {
                return result[n];
            } else {
                for (int i = 2; i <= n; i++) {
                    FibN = FibTwo + FibOne;
                    FibOne = FibTwo;
                    FibTwo = FibN;
                }
            }
            return FibN;
        }
    
        public static void main(String[] args) {
            // 用解法1求序列的第100项,直接不动了
            // System.out.println(Fib1(100));
            System.out.println(Fib2(100));
        }
    }
  • 相关阅读:
    mysql数据库——特殊sql语句整理之修改表结构
    mysql数据库引擎——MyISAM,InnoDB
    Golang程序性能分析
    Docker基本操作
    go module
    Docker基础原理
    基于zookeeper或redis实现分布式锁
    漫谈微服务
    快速排序
    设计模式泛谈
  • 原文地址:https://www.cnblogs.com/xiangpeng/p/10512289.html
Copyright © 2011-2022 走看看