java学习day16

95 阅读1分钟

day16 递归

1.递归特点

  • 理解:自己调用自己的方法,但是不能无限制的调用,在合适的时候又要一层层跳出自己方法最后跳出。在使用递归时,我觉得不能把问题考虑的太细,不然会陷入这个循环中把自己给绕晕,既然每个子问题规律一样,只需要知道他们规律,剩下交给计算机处理。在递归过程中,一定要保证有跳出递归的条件还有就是递归函数不一定效率就很高,如会受递归的深度、递归函数的实现方式等影响。当递归深度较大时,可能会导致堆栈溢出,从而影响程序的性能。

2.代码

  • 递归实现1到n的和 如果n小于0,则返回0作为结果。 如果n大于0,则递归调用函数,并返回n加上递归调用函数的结果。
  • 斐波那契数列 F(0) = 0 F(1) = 1 F(n) = F(n-1) + F(n-2) (n >= 2)
package datastructure.stack;
public class Recursion {

    /**
     * Sum to N. No loop, however a stack is used.
     * @param paraN
     * @return
     */
    public static int sumToN(int paraN){
        if (paraN<0){
            return 0;
        }

        return sumToN(paraN-1) + paraN;
    }

    /**
     * Fibonacci sequence.
     * @param paraN The given value.
     * @return The sum.
     */
    public static int fibonacci(int paraN){
        if (paraN <= 0){
            return 0;
        }else if(paraN == 1){
            return 1;
        }

        return fibonacci(paraN-1) + fibonacci(paraN-2);
    }

    public static void main(String[] args) {
        int tempValue = 5;
        System.out.println("0 sum to " + tempValue + " = " + sumToN(tempValue));
        tempValue = -1;
        System.out.println("0 sum to " + tempValue + " = " + sumToN(tempValue));

        for(int i = 0; i < 10; i ++) {
            System.out.println("Fibonacci " + i + ": " + fibonacci(i));
        }
    }
}

在这里插入图片描述