使⽤Java打印斐波那契数列的三种⽅法
动态规划:
double fib(int n)
{
if (n == 1 || n == 2)
{
return1;
}
else if (map[n] > 0)
{
return map[n];
}
else
{
map[n] = fib(n-1) + fib(n-2);
return map[n];
}
}
斐波那契数列⼜称黄⾦分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔⼦繁殖为例⼦⽽引⼊,
故⼜称为“兔⼦数列”。在数学上,斐波纳契数列以如下被以递归的⽅法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。下⾯是三种打印斐波那契数列的的⽅法:
现在,我们使⽤Java来打印斐波那契数列的前10个数字:
第⼀种:直接赋值法:
public class PrintFib {
public static void main(String[] args) {
//定义第⼀个加数a,初始值为1;定义第⼆个加数b,初始值为1;定义两个加数之和为c,初始值为0
int a = 1;
int b = 1;
int c = 0;
//⾸先在控制台打印出数列中第⼀个数和第⼆个数的值
System.out.print(a + "\t" + b + "\t");
//建⽴⼀个for循环,⽤于循环输出数列中第三位⾄第⼗位的数字
for (int i = 3; i <= 10; i++) {
/
/第三个数即为c,a+b等于c的值
c = a + b;
//将第⼀个加数a赋值为数列中的第⼆个数b的值
a = b;
//将第⼆个加数b赋值为数列中的第三个数c的值printf输出格式java
b = c;
//在第⼆次循环打印时,将打印数列中的第四个数为:b + c = b + (a + b)
System.out.print(c + "\t");
}
}
}
还可以简化为⼀次打印出两个
public class PrintFib {
public static void main(String[] args) {
int a = 1;
int b = 1;
for(int i = 1;i <= 5;i++) {
//循环打印a,b两个数,即两个两个打印
System.out.print(a + "\t" + b + "\t");
//打印第三、四个数
a = a + b;
b = a + b;
}
}
}
第⼆种⽅式:建⽴并打印数组
public class PrintFib {
public static void main(String[] args) {
//建⽴⼀个长度为10的数组⽤于存放数列中的数
int[] arr = new int[10];
//先定义数列中的第⼀个和第⼆个数
arr[0] = 1;
arr[1] = 1;
/
/建⽴⼀个for循环,打印数组中的元素
for(int i = 0;i < arr.length;i++) {
//判断:当打印第三个数前,给第三个数赋值
if(i > 1) {
arr[i] = arr[i - 2] + arr[i - 1];
}
System.out.print(arr[i] + "\t");
}
}
}
第三种⽅式:递归调⽤函数
public class PrintFib {
//建⽴⼀个函数,⽤于计算数列中的每⼀项
public static int fib(int num) {
//判断:是否是第⼀个数和第⼆个数
if(num == 1 || num == 2) {
return1;
}else {
//循环调⽤本函数
return fib(num - 2) + fib(num - 1);
}
}
/
/主函数(程序⼊⼝)
public static void main(String[] args) {
//建⽴⼀个for循环,⽤于打印第⼀个⾄第⼗个数字
for(int i = 1;i <= 10;i++) {
//调⽤函数进⾏打印
System.out.print(fib(i) + "\t");
}
}
}