关于递归

递归在处理循环调用方法本身上有很好的效果,它的特点是牺牲了内存,在特定情况下提高了运算速度。如在求 某数的阶乘,利用递归调用显然比循环乘法运算更有效果(在输入较大数时容易溢出)

package recur;

import java.util.Scanner;

public class Recur {
    public static void main(String[] args) {
        System.out.println("请输入一个整数:");
        int n = new Scanner(System.in).nextInt();
        
        long ret = factorial1(n);
        System.out.println(n+"的阶乘为:"+ret);
    }
    /**
     * 一般求参数i的阶乘
     * @param i 输入的整数
     * @return 返回i的阶乘的计算结果
     */
    private static long factorial(int i) {
        long r = 1;
        if(i==0||i==1){
            return r;
        }
        for(;i>0;i--){
            r=r*i;
        }
        return r;
    }
    
    /**
     * 递归求参数i的阶乘
     * @param i 输入的整数
     * @return 返回i的阶乘的计算结果
     */
    private static long factorial1(int i) {
        if(i==0){
            return 1;
        }
        return i*factorial1(i-1);
    }
}

再看一个一个例子,求第n个斐波那契数:1,1,2,3,5,8,13......,在这个例子中利用递归显然没有普通算法有优势,,一般情况下有多个递归分支的情况下不建议使用递归方法。

    private static long Fibonacci(int n) {
        long a = 1;//第一个
        long b = 1;//第二个
        for(int i=3;i<=n;i++) {
            b = a+b;
            a = b-a;
        }
        
        return b;
    }
    
    
    //递归
    private static long Fibonacci(int n) {
        if(n == 1 || n == 2) {
            return 1;
        }
        
        return f(n-1) + f(n-2);
    }
posted @ 2015-12-26 13:03  冰山雪鸮  阅读(114)  评论(0编辑  收藏  举报