原文:
Write a method to generate the nth Fibonacci number.
译文:
写一个函数来产生第n个斐波那契数。
斐波那契数列的定义如下:
f(1) = f(2) = 1;
f(n) = f(n-1) + f(n-2);
package chapter_8_Recursion;
import java.util.Scanner;
/**
*
* 写一个函数来产生第n个斐波那契数。
*
*/
public class Question_8_1 {
/**
* @param m
* @return
*
* 递归
*
*/
public static int generateNth(int m) {
if(m < 1) {
return -1;
}
if(m == 1 || m == 2) {
return 1;
} else {
return generateNth(m-1) + generateNth(m-2);
}
}
/**
* @param m
* @return
*
* 非递归
*
*/
public static int generateNth2(int m) {
if(m < 1) {
return -1;
}
if(m ==1 || m == 2) {
return 1;
}
int sum = 0;
int a = 1; int b = 1;
for(int k = m; k>2; k--) {
sum = a + b;
a = b;
b = sum;
}
return sum;
}
/**
* @param a
* @param b
* @return
*
* 快速计算a的b次幂
*
* 时间复杂度为0(logn)
*
*/
public static int pow(int a, int b) {
int sum = 1;
int x = 1;
while(b > 0) {
if((b & 1) == 1) {
sum *= (x * x);
}
x = x * 2;
b >>= 1;
}
return sum;
}
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.nextLine();
while(num -- > 0) {
int m = scanner.nextInt();
scanner.nextLine();
int result = generateNth2(m);
System.out.format("%d : %d\n", m, result);
}
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.format("%d %d = %d\n", a, b, pow(a, b));
}
}