zoukankan      html  css  js  c++  java
  • 递归回溯最简单易懂的小例子

    这是我看刚刚看的剑指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]); // 递归完毕后,回溯输出
        }
    }

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

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

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

  • 相关阅读:
    [Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍
    Flink -- Barrier
    深入理解Flink ---- End-to-End Exactly-Once语义
    深入理解Flink ---- 系统内部消息传递的exactly once语义
    flink watermark介绍
    flink中对于window和watermark的一些理解
    Apache Flink:详细入门
    flink学习之十一-window&EventTime实例
    Lambda语法
    String s = “1a2a3a4a” 解码为 “1234”
  • 原文地址:https://www.cnblogs.com/l199616j/p/10269199.html
Copyright © 2011-2022 走看看