斐波那契数列

本文介绍斐波那契数列的递归与非递归算法实现,并提供Java代码示例,展示如何通过不同方法计算数列中的值。
/*
---描述:
  著名的斐波那契数列:从n>2开始,后面的每个数是前面两个数之和,例如
1 1 2 3 5 8 13······
算法思想:递归方式:通过数列找出递推项,推出循环不不变式,通过观察可以发现从n>2开始,后面的每个数的值是前面两个数之和,因此递推项为 f(n)=f(n-1)+f(n-2)
所以如果运用递归的方法来做,那么是:想求f(n)那么先求f(n-1)+f(n-2),而求f(n-1)就要求f(n-2)+f(n-3),同样f(n-2)也是,那么这样向后推,递归。递归的终止条件是n>=2时,f(n)=1.


循环方式:通过递推项,我们可以归纳出循环不变式,假如如果用a,b,c分别代替f(n-2),f(n-1),f(n)那么这样我们会发现循环不变式为( c=a+b,b=c,a=b )。
*/


class  MethodImpl
{
public static void main(String[] args) 
{
System.out.println(feiBo(6));
//feiBoNa1(10);
//System.out.println("-------------");
//feiBoNa2(4);
}
//递归算法(每个月兔子的数量) n为当月兔子的数量,
public static int feiBo(int n)
{
if(n<=2)
{
return 1;
}else{
return feiBo(n-1)+feiBo(n-2);
}
}
//非递归算法 n为从第三个月起,你所要输出的月的个数
public static void feiBoNa1(int n )
{
//第1个和第2个月的数量为1,
int a = 1;
int b = 1;
int c = 0;//为第三个月,要从第三个月开始循环
System.out.print(a+"  "+b+"  ");
for(int i = 1; i<=n; i++)
{
c = a + b;
System.out.print(c+"  ");
a = b;
b = c;
}

}


/*循环算法优化,观察到其实递推的循环式可以更加简单,
1 2 3 4 5 6 7 8 9
a b c=a+b a=b+c b=c+a c=a+b a=b+c b+c+a ········
这样,我们发现循环递推式由(a b c=a+b a=b b=c c=a+b)变为(c=a+b a=b+c b=c+a )
所以代码
*/
//n为从第三个月起,你所要输出的月的个数,又因为这个循环不变式是3个,所以实际输出的应该是n*3个月的个数
public static void feiBoNa2(int n )
{
//第1个和第2个月的数量为1,
int a = 1;
int b = 1;
int c = 0;//为第三个月,要从第三个月开始循环
System.out.print(a+"  "+b+"  ");
for(int i = 1; i<=n; i++)
{
c = a + b;
a = b+c;
b = c+a;
System.out.print(c+"  "+a+"  "+b+"  ");
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值