‘壹’ java语言解决斐波那契数列问题
递归函数的定义:
递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。
递归方式:递归调用有直接递归和间接递归两种方式。
直接递归:在函数中出现调用函数本身。
下面代码求斐波那契数列第n项,斐波那契数列第一和第二项是1,后面每一项是前两项之和,即1、1、2、3、5、8、13
...。
public
class
test
{
public
static
void
main(string
args[])
{
int
x1
=
1;
int
sum
=
0;
int
n
=
7;
for
(int
i
=
1;
i
<=
n;
i++)
{
x1
=
func(i);
sum
=
sum
+
x1;
}
system.out.println("sum="
+
sum);
}
public
static
int
func(int
x)
{
if
(x
>
2)
return
(func(x
-
1)
+
func(x
-
2));
else
return
1;
}
}
间接递归:指函数中调用了其他函数,而该其他函数有调用了本函数。
用间接递归来计算上述斐波那契数列。
程序代码:
public
class
test
{
public
static
void
main(string
args[])
{
int
x1
=
1;
int
sum
=
0;
int
n
=
7;
for
(int
i
=
1;
i
<=
n;
i++)
{
x1
=
func1(i);
sum
=
sum
+
x1;
}
system.out.println("sum="
+
sum);
}
public
static
int
func1(int
a){
int
b;
b=func2(a);
return
b;
}
public
static
int
func2(int
b)
{
if
(b>
2)
return
(func1(b
-
1)
+
func1(b
-
2));
else
return
1;
}
}
‘贰’ java 斐波那契数列
importjava.util.Scanner;
/**
*斐波那契数列:第0项是0,第1项是第一个1。
这个数列从第三项开始,每一项都等于前两项之和
*@authoryoung
*
*/
publicclassFei{
publicstaticvoidfunc(intn){
if(n<3){
System.out.println("0,1");
}elseif(n>3){
inta=0,b=1,c=0;
System.out.print(a+""+b+"");
for(inti=3;i<=n;i++){
c=a+b;
a=b;
b=c;
System.out.print(c+"");
}
}elseif(n<0){
System.out.println("输入数字不符合要求");
}
}
publicstaticvoidmain(String[]args){
Feif=newFei();
Scannerinput=newScanner(System.in);
System.out.print("请输入斐波那契数列的列数n,按ENTER:");
intnum=input.nextInt();
System.out.println("斐波那契数列为:");
func(num);
}
}
正确的代码
‘叁’ java语言用数组输出Fibonacci数列:1 1 2 3 5 8 13....前20
方法如下供参考:
publicclassTest{
publicstaticvoidmain(String[]args){
intintArrary[]=newint[20];
intArrary[0]=intArrary[1]=1;
for(inti=2;i<intArrary.length;i++){
intArrary[i]=intArrary[i-1]+intArrary[i-2];
}
System.out.println("Fibonacci数列:11235813....前20如下所示:");
for(inti=0;i<intArrary.length;i++){
if(i%5==0)
System.out.println();
System.out.print(intArrary[i]+" ");
}
}
}
‘肆’ 用JAVA数组来求斐波那契数列前20项: 1 1 2 3 5 8 ….
publicclassDemo{
publicstaticvoidmain(String[]args){
intn=20;
intsum=0;
for(inti=1;i<=n;i++){
System.out.print(fibo(i)+" ");
sum+=fibo(i);
}
System.out.println(" 菲波那契数列的前20项和为:"+sum);
}
privatestaticintfibo(intn){
if(n==1)
return1;
if(n==2)
return1;
returnfibo(n-1)+fibo(n-2);
}
}
数组法:
publicclassDemo{
publicstaticvoidmain(String[]args){
int[]array=newint[20];
array[0]=1;
array[1]=1;
intsum=0;
for(inti=2;i<array.length;i++){
array[i]=array[i-1]+array[i-2];
}
//遍历数组并累计
for(inti=0;i<array.length;i++){
sum+=array[i];
}
//输出和
System.out.println(" 菲波那契数列的前20项和为:"+sum);
}
}
‘伍’ 如何用java语言输出斐波那契数列
/*packagewhatever;//don'tplacepackagename!*/
importjava.util.*;
importjava.lang.*;
importjava.io.*;
classFibonacci{
publicstaticvoidmain(String[]args){
inta=1,b=1,c=0;
System.out.print(a+" "+b+" ");
for(inti=1;i<=18;i++){
c=a+b;
a=b;
b=c;
System.out.print(c+" ");
if((i+2)%5==0)
System.out.println();
}
}
}
‘陆’ 编写程序,输出fibonacci数列(斐波纳契数列)的前五十项 用java语音
算是很简单的一个题目。
publicclassTest_01{
//一共显示SUM项
privatestaticfinalintSUM=50;
//将fibonacci数列放入数组中(由于第50项的数字已经超过了int的上限,故用long)
privatestaticlong[]fibonacci=newlong[SUM];
{
//初始化fibonacci数列的前两项,即f(1)=1、f(2)=1
fibonacci[0]=1L;
fibonacci[1]=1L;
for(inti=2;i<SUM;i++){
//根据fibonacci数列定义f(n)=f(n-1)+f(n-2)求出后面的项,一直求到第SUM项
fibonacci[i]=fibonacci[i-1]+fibonacci[i-2];
}
}
publicstaticvoidmain(String[]args){
//必须先初始化,不然fibonacci数组中的值全为0
newTest_01();
//50个数字不好在同一行输出,故不采用Arrays.toString()方法
for(inti=0;i<Test_01.SUM;i++){
System.out.println(Test_01.fibonacci[i]);
}
}
}
‘柒’ 用java编写程序,输出fibonacci数列的前20项
运用递归来写fibonacci的算法,其中当输入0时,返回0,当输入1时,返回1
publicstaticvoidmain(Stringargs[]){
intindex=0;
while(index<20)
{
System.out.println(fibonacci(index++));
}
}
privatestaticintfibonacci(inta)
{
if(a==0)return0;
if(a==1)return1;
returnfibonacci(a-1)+fibonacci(a-2);
}
最后的效果如下
‘捌’ java编程实现输出fibonacci数列(要求利用数组实现)的前30项
这个问题没有难度吧。写了一下你参考下,循环 递归都能轻松实现的。
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
int[]fibonacci=null;
fibonacci=fibonacci(30);
System.out.println(Arrays.toString(fibonacci));
fibonacci=newint[30];
fibonacci(fibonacci,0);
System.out.println(Arrays.toString(fibonacci));
}
//循环
publicstaticint[]fibonacci(intlength){
int[]fibonacci=newint[length];
fibonacci[0]=0;
fibonacci[1]=1;
for(inti=2;i<length;i++)
fibonacci[i]=fibonacci[i-1]+fibonacci[i-2];
returnfibonacci;
}
//递归
publicstaticvoidfibonacci(int[]fibonacci,intindex){
if(index>-1&&index<fibonacci.length){
if(index<2&&index>-1)
fibonacci[index]=index;
else
fibonacci[index]=fibonacci[index-1]+fibonacci[index-2];
fibonacci(fibonacci,index+1);
}
}