Fibonacci序列是由兔子生小兔子的问题引申出来的,一只兔子一个月生一个小兔子,小兔子一个月后也开始生兔子,则第一个月有一只小兔子,第二个月有一只具有生育能力的兔子,第三个月有两只兔子,第四个月有三只兔子,第五个月有五只兔子。。。以此类推,它所代表的数学表达式即:
f(n) = 1 , when n=1,or 2
f(n) = f(n-1) + f(n-2), when n > 2
该问题既可以用递归计算,也可以用循环来解答,以下是JAVA代码:
package com.jst.algorithms;
import java.util.Scanner;
public class Fibonacci {
/**
* Fibonacci序列第num个位置数值:第一,二个数值为1,其后每个数值是前两个数值之和
* if n == 1 or n == 2 , then f(n) = 1
* else f(n) = f(n-1) + f(n-2)
* @param num
* @return 返回Fibonacci序列中第num个值
*/
public static int fibonacci(int num) {
if (num == 1 || num == 2) {
return 1;
}
return fibonacci(num - 1) + fibonacci(num - 2);
}
/**
* 循环求解,可以求解整个序列
* @param num
* @return
*/
public static int fibonacci2(int num) {
int fn_1 = 1, fn_2 = 1;
int temp;
if (num == 1 || num == 2) {
return 1;
} else {
for (int i = 3; i <= num; ++i) {
temp = fn_1;
fn_1 = fn_2;
fn_2 = temp + fn_2;
}
return fn_2;
}
}
/**
* @param args
*/
public static void main(String[] args) {
int num;
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
scanner.close();
// int result = fibonacci(num);
int result = fibonacci2(num);
System.out.println("f(" + num + ") = " + result);
}
}