java中递归调用fibonacci

public class Fab
{
public static void main(String[]args){
System.out.println(f(40));
}

public static long f(int index)
{
if(index == 1||index == 2){
return 1;
}

long f1=1l;
long f2=1l;
long f=0;
for(int i=1;i<=index-2;i++){
f2=f;
f1=f2;
f=f1+f2;
}
return f;
}
}

public class Fibonacci {    
        
    /*输出斐波那契数*/   
    public static void printFibonacciNumber(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers    
        for(int i = 1;i <= n;i++){    
            System.out.print(f1+" "+f2+" ");//先输出前两个数    
            if(i % 5 == 0)System.out.print("\n"); //换行   
            f1 = f1+f2;   //计算下两个数 
            f2 = f1+f2;    
        }    
            
        /*后数除前数为黄金分割点*/   
        System.out.print("\n"+"-------------------------------------"+"\n");    
        System.out.println((double)f2/f1);//越到后边,后数除前数越接近黄金分割点    
            
            
    }    
        
    /*输出斐波那契数组*/   
    public static void printFibonacciArray(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers    
        long f[] = new long[n];    
        f[0]=f1;    
        f[1]=f2;    
        for(int i =2;i   
            f[i]=f[i-2]+f[i-1]; //数组的第三个数开始为前两个数的和   
        }    
        System.out.println("-------------------------------------"+"\n");    
        System.out.println(java.util.Arrays.toString(f)); //把数组转化成String输出   
            
    }    
   
    /**   
     * main method   
     * @param args   
     */   
    public static void main(String[] args) {    
        Fibonacci.printFibonacciNumber(0, 1, 10);//print the 20 advanced fibonacci number    
        Fibonacci.printFibonacciArray(0, 1, 20);    
    }    
   
}

希望能帮到你。

追问

俺是初学者 能不能说的直白一些

追答

你就看看这几个数字的特点,其实就是利用递归,重复调用方法本身,就是这样。建议你花店时间去看看java的迭代技术。

追问

哦谢谢哦 刚发现烦了逻辑错误了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-21
文件不要保存成有格式的UTF-8文件。

f作为函数名、而函数之内又作为变量名。追问

刚发现问题 其实我犯了逻辑性的错误 考虑一下f1 与f2 还有f转换的时候的逻辑就知道怎么回事了

相似回答