生活中实践算法之递归
来源:互联网 发布:网站生成app软件 编辑:程序博客网 时间:2024/05/21 19:35
小G无意间听到“Android”这个新玩样,于是乎打开谷歌,输入关键字“Android"试图了解了解,结果网页中秀出一条”Android is an operating system based on the Linuxkernel.....”,--!英语词汇不过关,蓝色字体部分不懂。没办法,再接着借用google继续查找它们的释义“操作系统”,“linux内核”......,直到把生词都弄懂,才初步了解android的意思。
生活中有很多这样相似的例子。其实,这其中就蕴藏着“递归”的思想:(递归策略)-谷歌搜索,(递归出口)-排除生词。
在编程中,这是一个函数调用自身的过程,反复操作中寻求函数出口,下面以大家熟悉的“查找”为例展开分析:
int int_find_recursion(int *array, int length, int value){ int index = length - 1; if (index < 0) { return -1; } if ((array[index] == value)) { return index; } else { return (int_find_recursion(array, index, value)); } }
这段代码是从一个整型序列[0, length]中查找“目标数值”value,若不命中目标,则会调用自身从下一个序列[0, length-1]查找,如此反复直到(index < 0);若仍未命中目标,即查找失败。
再举一个“求和”例子:计算0,1,2......n的总和,即sum = 0 + 1 + 2 + ......+n
int sum_calculate_loop(int arrange){ int sum = 0; int cnt; for (cnt = 0; cnt <= arrange; cnt++) { sum += cnt; } return sum;}换种思路,当n=0时,sum[0]=0;sum[n] = n + sum[n-1],那么就可以利用“递归”的思想来实现:
int sum_calculate_recursion(int arrange){ if (0 == arrange) { return arrange; } else { return (arrange + sum_calculate_recursion(arrange - 1)); }}
一般场合下,递归实现的算法较为简洁,但在实际编程应用中还需考量递归过程中频繁堆栈带来的开销。
附:算法的成长之路便是:测试 + 优化,上面”求和“的解法还不是最优,利用求和公式”sum=(n*n + n)/2可更快求解!下一篇,“非递归排序”将会登场。
- 生活中实践算法之递归
- 程序算法艺术与实践:递归策略之Fibonacci数列
- 程序算法艺术与实践:递归策略之递归,循环与迭代
- 递归生活
- 程序算法艺术与实践:递归策略之矩阵乘法问题
- oralce之递归算法
- 单链表之递归算法
- 算法之递归(一)
- 算法 修炼 之递归
- 算法之递归
- 递归算法之置换
- 算法之递归练习
- 算法之递归思想
- 汉诺塔之递归算法
- 数据结构之递归算法
- 酒干倘卖无之递归算法
- 算法分析之递归
- 算法之尾递归
- Android传感器---Position Sensor(一)
- Android传感器---Position Sensor(二)
- Android传感器---Environment Sensor
- 网页设计最标准的尺寸
- Lightoj 1084 记忆化搜索(DP)
- 生活中实践算法之递归
- webservice简单实例
- 结构体Rect Point Size 操作
- Oracle - SGA → Shared_pool
- Github Mybatis深入学习之入门讲解
- 一点总结
- awk中文详解
- lds分析
- 深入理解Hadoop集群和网络