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


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

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

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

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

  • 相关阅读:
    深入剖析C#的多态
    .NET多线程编程:多任务和多线程
    .Net类库中实现的HashTable
    用C#编写ActiveX控件
    用微软.NET架构企业解决方案 学习笔记(四)业务层
    SQL事务
    WCF基础知识问与答
    在.NET环境中使用单元测试工具NUnit
    圣殿骑士博客转载系列
    系统架构师学习笔记_第十二章
  • 原文地址:https://www.cnblogs.com/l199616j/p/10269199.html
Copyright © 2020-2023  润新知