看到一些递归题目,觉得很有意思,记录下来,以备查询。
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
在数学上,斐波纳契数列被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)。
1 package com.delon.fibonacci; 2 3 public class Fibonacci { 4 5 //用递归求第10个数,它等于前2数之和,如{1,1,2,3,5} 6 //得到递归式为f(n)=f(n-1)+f(n-2),终止条件为f(0)=1, f(1)=1。求的数为f(9)。 7 //1,1,2,3,5,8,13 8 //F(0)=0 9 //F(1)=1 10 //F(2)=1 11 //F(3)=F(2)+F(1)=1+1=2 12 13 //递归实现方式 14 public int fibonacciRecursion(int n){ 15 //if(n<=2) 16 if (n==1||n==2){ 17 return 1; 18 }else{ 19 return fibonacciRecursion(n-1)+fibonacciRecursion(n-2); 20 } 21 } 22 23 //递推实现方式 24 public int fibonacciNormal(int n){ 25 //if(n<=2) 26 if(n==1||n==2){ 27 return 1; 28 } 29 int a1=1; 30 int a2=1; 31 int temp = 0; 32 33 for(int i=1;i<n-1;i++){ 34 temp = a1+a2; 35 a1=a2; 36 a2=temp; 37 } 38 return temp; 39 } 40 41 42 public static void main(String[] args) { 43 // TODO Auto-generated method stub 44 Fibonacci f = new Fibonacci(); 45 System.out.print("normal:"+f.fibonacciNormal(7)+" "); 46 System.out.print("recursion:"+f.fibonacciRecursion(7)); 47 } 48 49 }