zoukankan      html  css  js  c++  java
  • 剑指Offer-斐波那契数列

    题目描述

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39

    思路

    思路一:

    用递归求解,F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

    思路二:

    用迭代方法,用两个变量记录fn-1和fn-2

    代码实现

    package Recursion;
    
    /**
     * 题目描述
     * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
     * n<=39
     * 思路:
     * 在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
     * 用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。
     * 特别指出:0不是第一项,而是第零项。
     */
    public class Solution03 {
        public static void main(String[] args) {
            System.out.println(Fibonacci_2(4));
        }
    
        /**
         * 用递归直接求解
         *
         * @param n 斐波那契数列第n项
         * @return 斐波那契数列第n项的值
         */
        public static int Fibonacci(int n) {
            if (n <= 0) {
                return 0;
            }
            if (n <= 1) {
                return n;
            } else {
                return Fibonacci(n - 1) + Fibonacci(n - 2);
            }
        }
    
        /**
         * 迭代方法,用两个变量记录fn-1和fn-2:
         *
         * @param n 斐波那契数列第n项
         * @return 斐波那契数列第n项的值
         */
        public static int Fibonacci_2(int n) {
            int zero = 0, one = 1, fN = 0;
            if (n <= 0) {
                return 0;
            } else if (n == 1) {
                return 1;
            } else {
                //由zero和one保存中间结果
                for (int i = 2; i <= n; i++) {
                    fN = one + zero;
                    zero = one;
                    one = fN;
                }
                return fN;
            }
        }
    }
    
  • 相关阅读:
    模板之st表
    codevs 1163 访问艺术馆
    noip提高组2000 乘积最大
    [HNOI2008]越狱(luogu P3197)
    [ZJOI2009]假期的宿舍(luogu P2055)
    noip普及组2013 车站分级(luogu P1983)
    [HNOI2010]平面图判定
    sql中对于case when...then...else...end的写法和理解
    java中,去除空白的方法
    关于debug时的一些操作
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8623104.html
Copyright © 2011-2022 走看看