猴子睡觉前之三:递归算法的理解
2014-10-25 23:29
232 查看
递归算法因为写起来简单,所以一直给我一种高大上,而且很难掌握的感觉。但是仔细想过之后,发现其中还是有一些规律的。
先来举几个例子。
第一个例子是回文数组的判断,原理很简单,只要不断地判断数组的第一个与第n个,第二个与第n-1个,以此类推就可以得到结果。
所以正确的逻辑是(只表达逻辑,先不考虑语法对错)
boolean isHuiWen(Array array)
{
if (array.length <=1)
{
return true;
}else if (firstElement == LastElement)
{
return isHuiWen(array.subArray(secondElement,lastButOneElement));
} else {
return false;
}
}
第二个例子是求二叉树的深度的问题
int depthOfTree:(Root root)
{
if (root == undefined) return 0;
return 1 + Max(depthOfTree(
root.left),depthOfTree(root.right));
}
分析以上两个例子中相似的地方,那就是把问题处理成不断地去做同一件事情,只是每次做这件事情的时候都需要进行参数的改变,而参数本身和最开始传入的参数是属于一个类型的子参数。所谓子参数也就是可以通过主参数的某个方法进行获取到得参数。
以此类推的话,可以想象一下,所有需要重复进行一个操作而且每次操作的参数都是主参数的同类子参数的话,那么就可以用递归函数来表示。
递归函数本质上来说是一个循环,知识把跳出条件放到了函数体内,而函数体本身就像一个循环一样。所有递归能解的问题,循环都可以,但是并不是所有循环可以解决的问题,递归都可以,要注意递归的限制条件是不断地重复一个逻辑。而且是有参数的。
暂时先想到这么多,等以后发现问题或者有更深入的思考再做修改。
先来举几个例子。
第一个例子是回文数组的判断,原理很简单,只要不断地判断数组的第一个与第n个,第二个与第n-1个,以此类推就可以得到结果。
所以正确的逻辑是(只表达逻辑,先不考虑语法对错)
boolean isHuiWen(Array array)
{
if (array.length <=1)
{
return true;
}else if (firstElement == LastElement)
{
return isHuiWen(array.subArray(secondElement,lastButOneElement));
} else {
return false;
}
}
第二个例子是求二叉树的深度的问题
int depthOfTree:(Root root)
{
if (root == undefined) return 0;
return 1 + Max(depthOfTree(
root.left),depthOfTree(root.right));
}
分析以上两个例子中相似的地方,那就是把问题处理成不断地去做同一件事情,只是每次做这件事情的时候都需要进行参数的改变,而参数本身和最开始传入的参数是属于一个类型的子参数。所谓子参数也就是可以通过主参数的某个方法进行获取到得参数。
以此类推的话,可以想象一下,所有需要重复进行一个操作而且每次操作的参数都是主参数的同类子参数的话,那么就可以用递归函数来表示。
递归函数本质上来说是一个循环,知识把跳出条件放到了函数体内,而函数体本身就像一个循环一样。所有递归能解的问题,循环都可以,但是并不是所有循环可以解决的问题,递归都可以,要注意递归的限制条件是不断地重复一个逻辑。而且是有参数的。
暂时先想到这么多,等以后发现问题或者有更深入的思考再做修改。
相关文章推荐
- 猴子睡觉前之一:时间复杂度的理解
- oracle中 connect by prior 递归算法 -- 理解
- oracle中 connect by prior 递归算法 -- 理解
- php 实现猴子选大王递归算法
- 对递归算法的理解
- 递归算法--如何一步一步理解递归(1)
- 递归算法终极理解—用人脑理解递归算法
- 全排列的递归算法(以此加深对递归的理解)
- 深入理解递归算法
- 对于汉诺塔递归算法的理解
- oracle中 connect by prior 递归算法 -- 理解
- 深入理解递归算法的调用过程
- PHP递归算法的一个实例 帮助理解
- 递归算法简单理解(转)
- 通过小案例简单理解递归算法
- 先序遍历二叉树的递归算法怎样理解
- 猴子睡觉前之二:property属性设置
- 个人最容易理解的汉诺塔算法解析(递归算法),通俗易懂,强烈推荐
- 汉诺塔-递归算法深入理解
- 硅谷狂人:我从来都不理解为什么需要睡觉