递归回溯最简单易懂的小例子

这是我看刚刚看的剑指offer上的一道面试题:用递归实现链表从后往前输出(c或c++),

我突然想用java试试,然后就有了这样一个小算法题:

任意一个一维数组,用递归实现从右往昨打印输出,下标从0开始,

比如一个数组:{1,2,3}
打印:3,2,1

首先分析一下这个小题:从0开始进入递归,递归到数组最后一个元素的时候,开始回溯输出,

如下代码:

public class Main {
    public static void main(String[] args) {
        int[] arr = new int[] {1,2,3,4,5,6,7,8,9};
        new Main().f(arr,0);
    }
    private void f(int[] arr,int index) {
        if(index<arr.length-1){
            f(arr,index+1);//递归
        }
        System.out.println(arr[index]); // 递归完毕后,回溯输出
    }
}

补充一点递归和数组的区别:

递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。

循环:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门(若前面两扇门都一样,那么这扇门和前两扇门也一样;如果第二扇门比第一扇门小,那么这扇门也比第二扇门小,你继续打开这扇门,一直这样继续下去直到打开所有的门。但是,入口处的人始终等不到你回去告诉他答案。

猜你喜欢

转载自www.cnblogs.com/l199616j/p/10269199.html
0条评论
添加一条新回复