设计Java 程序,利用至少三种方法实现计算Fibonacci数列第n项数值,n由键盘输入。
时间: 2024-12-14 20:16:32 浏览: 1
在Java中,可以使用循环、递归以及动态规划的方式来计算Fibonacci数列的第n项。以下是这三种方法的具体实现:
1. **循环(迭代)方法**
```java
import java.util.Scanner;
public class FibonacciIterative {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要计算的Fibonacci数列的项数: ");
int n = input.nextInt();
System.out.println("第" + n + "项的Fibonacci数是: " + fibonacciIterative(n));
}
public static long fibonacciIterative(int n) {
if (n <= 0) return 0;
long fib = (n == 1) ? 0 : 1;
for (int i = 2; i < n; i++) {
fib += fibonacciIterative(i - 1);
}
return fib;
}
}
```
2. **递归方法**
```java
public class FibonacciRecursive {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要计算的Fibonacci数列的项数: ");
int n = input.nextInt();
System.out.println("第" + n + "项的Fibonacci数是: " + fibonacciRecursive(n));
}
public static long fibonacciRecursive(int n) {
if (n <= 0) return 0;
return (n == 1 || n == 2) ? n - 1 : fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
}
```
3. **动态规划(备忘录法)**
```java
import java.util.Scanner;
public class FibonacciMemoization {
private long[] memo;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要计算的Fibonacci数列的项数: ");
int n = input.nextInt();
System.out.println("第" + n + "项的Fibonacci数是: " + new FibonacciMemoization().fibonacci(n));
}
public FibonacciMemoization() {
memo = new long[100];
}
public long fibonacci(int n) {
if (n <= 0) return 0;
if (memo[n] != 0) return memo[n];
memo[n] = fibonacci(n - 1) + fibonacci(n - 2);
return memo[n];
}
}
```
以上程序会让用户输入一个数字n,然后分别计算出Fibonacci序列的第n项。递归方法虽然简洁,但对较大的n来说效率不高;循环和动态规划则更优。
阅读全文