有n步台阶,一次只能上1步或2步,共有多少种走法。

典型的fibonacci问题

采用递归处理

public class Fibonacci01 {
    public static void main(String[] args) {
        int n=4;
        int fibonacci = fibonacci(n);
        System.out.println(fibonacci);
    }

    private static int fibonacci(int n){
        if(n<1){
            throw new IllegalArgumentException(n+"不能小于1");
        }
        if(n==1||n==2){
            return n;
        }
        return fibonacci(n-1)+fibonacci(n-2);
    }
}

采用迭代处理

public class Fibonacci02 {
    public static void main(String[] args) {
        int n=40;
        int fibonacci = fibonacci(n);
        System.out.println(fibonacci);
    }

    public static int fibonacci(int n){
        if(n<1){
            throw new IllegalArgumentException(n+"不能小于1");
        }
        if(n==1||n==2){
            return n;
        }
        int a=1;
        int b=2;
        int sum=0;
        for(int i=3;i<=n;i++){
            sum=a+b;
            a=b;
            b=sum;
        }
        return sum;
    }
}

小结

方法调用自身称为递归,利用变量的原值推出新值称为迭代。

递归:

  • 优点:大问题转化为小问题,可以减少代码量,同时代码精简,可读性好。
  • 缺点:递归调用浪费了空间,而且递归太深容易造成堆栈的溢出。

迭代:

  • 优点:代码运行效率好,因为时间只因循环次数的增加而增加,而且没有额外的空间开销。
  • 缺点:代码不如递归简洁,可读性好。

 

 posted on 2020-12-04 20:29  会飞的金鱼  阅读(90)  评论(0)    收藏  举报