这是我看刚刚看的剑指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]); // 递归完毕后,回溯输出 } }
补充一点递归和数组的区别:
递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。
循环:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门(若前面两扇门都一样,那么这扇门和前两扇门也一样;如果第二扇门比第一扇门小,那么这扇门也比第二扇门小,你继续打开这扇门,一直这样继续下去直到打开所有的门。但是,入口处的人始终等不到你回去告诉他答案。