斐波那契数列(递归、非递归算法)
题目
斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。
限制
时间限制:1秒 空间限制:32768K
package com.algorithm; import java.util.Scanner; /** * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39 * @日期:2018年6月30日 下午10:11:43 * @作者:Chendb */ public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.out.println(fibonacciRecursion(n)); System.out.println(fibonacci(n)); } /** * 递归算法 * @param n * @return */ public static int fibonacciRecursion(int n) { if (n < 1) { return 0; } if( n == 1 || n == 2) { return 1; } return fibonacciRecursion(n-1) + fibonacciRecursion(n-2); } /** * 非递归算法 * @param n * @return */ public static int fibonacci(int n) { if (n < 1) { return 0; } if( n == 1 || n == 2) { return 1; } int result = 1; int preResult = 1; // n - 2项 int currentResult = 1; // n - 1项 for (int i = 3; i <= n; i++) { result = preResult + currentResult; // n = f(n-1) + f(n-2) preResult = currentResult; // f(n-2) = f(n-1) currentResult = result; // f(n-1) = n } return result; } }