赞
踩
今天,我们来学习一下方法的递归,希望我的讲解可以让您对方法的递归调用有更深的了解。
递归调用就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变 得简洁。
2、各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等。
3、将用栈解决的问题,代码实现变得更加简洁。
举两个小案例来帮助大家理解递归调用机制。
1、打印问题
(1)代码如下
- package Test01;
- public class Test {
- public static void main(String[] args) {
- T t = new T();
- t.test(4);//输出什么?
- }
- }
- class T{
- public void test(int n){
- if(n>2){
- test(n-1);
- }
- System.out.println("n="+n);
- }
- }
(2)运行结果=================================================
(3) 内存分析法
2、阶乘问题
(1)代码如下
- public class Test {
- public static void main(String[] args) {
- T t = new T();
- t.test(4);//输出什么?
- int res = t.factorial(5);
- System.out.println("5的阶乘res="+res);
- }
- }
- class T{
- public void test(int n){
- if(n>2){
- test(n-1);
- }
- System.out.println("n="+n);
- }
- public int factorial(int n){
- if (n == 1) {
- return 1;
- }else {
- return factorial(n-1)*n;
- }
- }
- }
(2)运行结果
(3)内存分析
-
-
- public class MiGong {
- public static void main (String args[]){
- //创建一个迷宫 int map[][] = new int [8][]
- int map [][] = new int [8][7];
- //定义一个规则,1为不能过,0为能过
- //第一行和最后一行为1
- for(int i = 0;i<map.length;i++){
- for(int j = 0;j<map[i].length;j++){
- if(i == 0||i==7||j==0||j==6){
- map[i][j] = 1;
- }else {
- map[i][j] = 0;
- }
- }
- }
- map[3][1] = 1;
- map[3][2] = 1;
- //迷宫设置完成
- T aa = new T();
- aa.findWay(map,1,1);
- System.out.println("===================找路的情况");
-
- for(int i = 0;i<map.length;i++){
- for(int j = 0;j<map[i].length;j++){
- System.out.print(map[i][j]+" ");
- }
- System.out.println();
- }
-
-
- }
- }
- class T {
- public boolean findWay(int [][] map ,int i,int j){
- //0 能走 1不能走 2能走 3死路
- //初始位置在map [1][1]
- //如果在 map [6][5] 为2,表示已经找到
- if(map[6][5] == 2){
- return true;
- }else{
- if(map[i][j] ==0){
- map[i][j] = 2;
- //找路策略,下,右,上,左
- if(findWay(map , i+1 , j)){
- return true;
- } else if(findWay(map,i,j+1)){
- return true;
- } else if(findWay(map,i-1,j)){
- return true;
- } else if(findWay(map,i,j-1)){
- return true;
- } else {//上下左右 为 1 ,2,3
- map[i][j] = 3;
- return false;
- }
- }
- }
- System.out.println("n="+n);
- return false;
-
- }
- }
今天的方法递归调用就暂时学到这里,往后我会继续更新。
方法的递归调用主要就是明白是从哪里开始递,哪里开始归,注意方法递归中的细节(内存),栈与栈之间的关系,才是学习递归的重要方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。