递归的精髓是什么?

Posted mhg215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归的精髓是什么?相关的知识,希望对你有一定的参考价值。

有段话来理解递归,感觉不错:

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

递归的精髓:

递归就是有去(递去)有回(归来),如下图所示。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的钥匙可以打开后面所有门上的锁一样;“有回”是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。 

递归的三要素:

1、明确递归终止条件;

2、给出递归终止时的处理办法;

3、提取重复的逻辑,缩小问题规模。
上代码:
  static void Main(string[] args)
        {          
           int n= Digui1(3);
            Console.WriteLine(n);
            Console.ReadLine();
        
        }
        private static int Digui1(int j)
        {
            if (j == 0)
                return 0;
            int i = Digui1(j - 1);//第一次:j=2;  j=1;j=0;递进去的值
            int n= i + j;//j=1,i=0;j=2,i=1;j=3,i=3;归来的值
            return n;//n=1;n=3;
        }

 

 


以上是关于递归的精髓是什么?的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE 方法的使用

算法初级面试题08——递归和动态规划的精髓阶乘汉诺塔子序列和全排列母牛问题逆序栈最小的路径和数组累加成指定整数背包问题

Java 基础语法方法的使用

48个值得掌握的JavaScript代码片段(上)

算法设计方法:递归的内涵与经典应用

Java基础之方法的调用重载以及简单的递归