算法

【算法】-再谈递归

2017-03-20  本文已影响0人  其中一个cc

递归recursive问题作为算法的常见问题,今天来聊一聊。

好多人把递归和迭代傻傻分不清楚,其实,当你理解了其中一个,另一个就很好区分开了。

递归就好比是:一个先进后出的栈,每一次递归调用函数本身,就入栈;每一次递归结束,就出栈。直到递归结束。

举一个递归的简单例子。求阶乘n!

我们都知道,求3的阶乘就是3*2*1,求6的阶乘就是6*5*4*3*2*1……求n的阶乘n!就是n*(n-1)!

可以得到公式

用java实现一下。

public class Main {

public static void main(String args[]) {

System.out.println(jiecheng(5));

}

public static int jiecheng(int n){

if (n == 0) //终止条件

return 1;

else //递归部分

return n * jiecheng(n - 1);

}

}

调试运行,结果为120

除了求阶乘,递归还有很多常见的用途:

比如说,

(1)求二叉树深度(小米面试题)

面到这个问题,当时对递归理解的很浅,回过头来看,这个问题用递归就可以解决。

思路:比较左右子树的深度,二叉树的深度就是左右子树中深度大的那个+1;当左右子树为空时,返回0

首先定义二叉树节点

算法如下

运行结果为2

上一篇 下一篇

猜你喜欢

热点阅读