java递归

53 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天,点击查看活动详情

递归Recursion

概念:程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。

递归调用规则

1>当程序执行到一个方法时,就会开辟一个独立的空间(栈)

2>每个空间的数据(局部变量),都是相互独立的

两个简单的案例回顾递归机制

  1>简单的打印比2大的数字,从2开始

public static void test(int n){  
    if(n>2){  
        test(n-1);  
    }  
    System.out.println(n);  
}

2>实现阶乘

public static int factorial(int n){  
    if(n>1){  
        return factorial(n-1)*n;  
    }  else {  
        return 1;  
    }  
}

递归需要遵守的重要规则

1) 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

2) 方法的局部变量是独立的,不会相互影响,比如n变量

3) 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据

4)递归必须向退出递归的条件逼近,否则就是无限递归,出现报错StackOverflowError,死龟了.

5)当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果

返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。