用java递归 fn=f(n-1)+f(n-2) 求n

如题所述

    public class Demo2 {  

    // 定义三个变量方法  

    public static void main(String[] args) {  

    int a = 1, b = 1, c = 0;  

    System.out.println("斐波那契数列前20项为:");  

    System.out.print(a + "\t" + b + "\t");  

    //因为前面还有两个1、1 所以i<=18  

    for (int i = 1; i <= 18; i++) {  

    c = a + b;  

    a = b;  

    b = c;  

    System.out.print(c + "\t");  

    if ((i + 2) % 5 == 0)  

    System.out.println();  

    }  

    }  

    public class Demo3 {  

    // 定义数组方法  

    public static void main(String[] args) {  

    int arr[] = new int[20];  

    arr[0] = arr[1] = 1;  

    for (int i = 2; i < arr.length; i++) {  

    arr[i] = arr[i - 1] + arr[i - 2];  

    }  

    System.out.println("斐波那契数列的前20项如下所示:");  

    for (int i = 0; i < arr.length; i++) {  

    if (i % 5 == 0)  

    System.out.println();  

    System.out.print(arr[i] + "\t");  

    }  

    }  

    }  

    public class Demo4 {  

    // 使用递归方法  

    private static int getFibo(int i) {  

    if (i == 1 || i == 2)  

    return 1;  

    else  

    return getFibo(i - 1) + getFibo(i - 2);  

    }  

    public static void main(String[] args) {  

    System.out.println("斐波那契数列的前20项为:");  

    for (int j = 1; j <= 20; j++) {  

    System.out.print(getFibo(j) + "\t");  

    if (j % 5 == 0)  

    System.out.println();  

    }  

    }  

    }  

这道兔子题的实质就是斐波那契数列: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?,现在从变量、数组、递归三个角度出发解决这个puzzle,当然还有其它的方法,同一道题用各种不同的思路去思考解决,也是对知识综合运用的锻炼吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-03
//1 1 2 3 5 8 13
public static void main(String[] args) {
System.out.println(f(7));
}
public static int f(int n) {
if(n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2);
}
}

本回答被提问者和网友采纳
第2个回答  2016-07-20
用函数递归更简单,for循环也能解决
以下for循环方法:

int n=1;
int a=1; //f(n)
int b=1; //f(n-1)
int t=0; //f(n-2)
for(int i=1;i<n;i++){
t=b;
b=a;
a=b+t;
}
System.out.println("f(n)="+a);
第3个回答  2017-08-16
用矩阵快速幂求解
第4个回答  2016-07-20
0追问

递归求fn

相似回答