目录
题目 2:输入一个正整数n,输出对应第n项对应的斐波那契数列的值
今天看到一句话:“写不出来,只因为你写的不够多。”
定义:斐波那契数列(FibonacciSequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34 ⋯
在数学上,斐波那契数列被以如下的递推形式定义:
F(1)=1,F(2)=1
F(n)=F(n−1)+F(n−2),(n≥3,n∈N)
题目1:输入一个整数n,输出前20项的斐波那契数列值
分析:如图所示分析,以两个为一组输出结果
代码:
import java.util.Scanner;//引入Scanner包
public class java01 {
public static void main(String args[])
{
int f1 = 1;
int f2 = 1;
System.out.printf("%d %d ",f1,f2);
for(int i=1;i<10;i++) {
f1 = f1 + f2;
f2 = f1 + f2;
System.out.printf("%d %d ",f1,f2);
}
}
}
运行结果:
题目 2:输入一个正整数n,输出对应第n项对应的斐波那契数列的值
(1)方法分析:f1和f2每次后移一个单位
代码:
package my_project;
import java.util.Scanner;//引入Scanner包
import java.util.*;
public class java02 {
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
// if(n==1 || n==2) {
// System.out.println(1);
// return;
// }
int f1 = 1;
int f2 = 1;
int ret = 1;
for (int i=0 ; i < n-2 ; i++){//n-2是因为前面两项数字已知
//另一种写法 for(int i=2;i<=n;i++)
ret=f1+f2;//ret做中间变量
f1=f2;
f2=ret;
}
System.out.println(ret);
}
}
结果:
(2)(递归)方法分析:
递归条件:
1、要有一个递归公式;// F(n)=F(n−1)+F(n−2)
2、要有一个递归的终止条件;// n==1 || n==2
3、每一次递归都会缩小与终止条件的距离。
代码:
package my_project;
import java.util.Scanner;//引入Scanner包
import java.util.*;
public class java03 {
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int f1 = 1;
int f2 = 1;
System.out.println(fibonacci(n));
}
static int fibonacci(int n)
{
if(n==1 || n==2)
return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
结果:
题目 3:java编程判断斐波那契数是质数
素数也称为质数,是指在大于 1 的整数中,只能被 1 和其自身整除的数,2 是最小的质数。
我们想要知道斐波那契数列的第 n 项是否是一个素数,请你编写程序完成判断。
输入格式:
一行,一个整数 n(1≤n≤50)
输出格式:
一行,一个单词,如果 F(n) 是素数,输出true
,反之输出false
输入样例1:
1
输出样例1:
false
输入样例2:
2
输出样例2:
false
输入样例3:
3
输出样例3:
true
代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean flag = true;
long a,b,x,count;
a = 1;
b = 1;
x = 1;
count = 0;
for (int i = 0; i < n - 2; i++) {
x = a + b;
a = b;
b = x;
}
//System.out.println(x);
double x1 = x;
for (int i = 2; i < Math.pow(x,0.5); i++) {
if(x%i==0) {
flag = false ;
break;
}
}
if(x==1) {
flag = false;
}
if(flag) {
System.out.println(true);
} else {
System.out.println(false);
}
}
}
本人是初学者,难免不足之处,欢迎批评指导!
我们下个文章见!