public class Fibonacci {
public static void main(String args[]){
int n,fn;//n为第n项,fn为第n项的值
java.util.Scanner s = new Scanner(System.in);
n=s.nextInt();
fn=function(n);
System.out.println("斐波那契数列第"+n+"项为:"+fn);
}
public static int function(int n){
if(n==1 || n==2) return 1;
return function(n-1)+function(n-2);
}
}
递归
import java.util.*;
import java.io.*;
public class fib {
static int fib(int n){
if(n==1) return 0;
if(n==2) return 1;
return fib(n-1)+fib(n-2);
}
public static void main(String args[]){
int n;
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
System.out.println(fib(n));
}
}
迭代
import java.util.*;
import java.io.*;
public class fib {
static int fib[]=new int[30];
public static void main(String args[]){
int n;
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
fib[1]=0;fib[2]=1;
for(int i=3;i<=n;i++)
fib[i]=fib[i-1]+fib[i-2];
for(int i=1;i<=n;i++)
System.out.println(fib[n]);
}
}
(1)你的具体问题是什么,请明确你的问题。
(2)之前你提问很多,但是为什么从来没有采纳。麻烦及时采纳回答。
【以下回答由 GPT 生成】
可以对代码进行如下优化和改进:
public class Fibonacci {
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
System.out.println("请输入要计算的斐波那契数列的项数:");
int n = scanner.nextInt();
int result = calculateFibonacci(n);
System.out.println("斐波那契数列第" + n + "项为:" + result);
}
public static int calculateFibonacci(int n) {
if (n <= 0) {
throw new IllegalArgumentException("项数必须大于0");
}
if (n == 1 || n == 2) {
return 1;
}
int prev = 1;
int curr = 1;
for (int i = 3; i <= n; i++) {
int temp = curr;
curr = curr + prev;
prev = temp;
}
return curr;
}
}
优化提示: 1. 添加了对输入值的合法性检查,如果输入的项数小于等于0,抛出异常。 2. 使用循环替代递归计算斐波那契数列的值,通过维护两个变量prev和curr分别保存当前项和前一项的值,依次计算第n项的值。这种方式比递归更高效,避免了重复计算。 3. 修改变量名,使其更清晰易懂。 4. 提示用户输入项数。