4. 斐波那契数列的第一个和第二个数分别为1和1,从第三个数开始,每个数等于其前两个数之和(1,1,2,3,5,8,13…………).编写一个程序输出斐波那契数列中的前20个数。要求每行输出5个。
使用递归实现,我看了一下别人的代码,但是不知道程序是如何运行的,麻烦高人解释一下,感谢啊! package com.accp.zp; import java.util.*; public class TsetArgs {
public static void main(String[] args) {
System.out.print(f(5)+" ");
} public static int f(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2);
}
}
}
使用递归实现,我看了一下别人的代码,但是不知道程序是如何运行的,麻烦高人解释一下,感谢啊! package com.accp.zp; import java.util.*; public class TsetArgs {
public static void main(String[] args) {
System.out.print(f(5)+" ");
} public static int f(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2);
}
}
}
= f(3)+f(2) + f(2)+f(1)
= f(2)+f(1)+f(1)+f(0)+f(1)+f(0)+f(1)
=f(1)+f(0)+f(1)+f(1)+f(0)+f(1)+f(0)+f(1)=8
package com.accp.zp; import java.util.*; public class TsetArgs {
public static void main(String[] args) {
1、System.out.print(f(5)+" ");
} public static int f(int n) {
2、if (n == 1 || n == 2) {
return 1;
3、} else {
4、return f(n - 1) + f(n - 2);
}
}
}上面标号是程序的执行顺序,1是程序入口,然后调用f函数,将参数5传进去。执行2,因为n不为1也不为2,跳转到else,然后执行4分别计算f(4)---f(3)(将4,3作为参数传给f函数)--f(2)--f(1)(n=1或2返回1,即f(1)=f(2)=1),根据f(1)、f(2)的值分别计算出f(4)f(3),最好计算出f(5)!
a[0]=1;
a[1]=1;
int j=0;
for(int i=2;i<a.length;i++){
a[i]=a[i-1]+a[i-2];
}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
j++;
if(j%5==0){
System.out.println();
}
}
int[] a = new int[10];
a[0] = 1;
a[1] = 1;
for(int i = 2 ; i <= a.length - 1 ; i ++){
a[i] = a[i-2] + a[i - 1];
}
for(int b : a){
System.out.print(b + "\t");
}