码迷,mamicode.com
首页 > 其他好文 > 详细

漫谈递归

时间:2015-10-30 12:47:48      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

什么时候用递归好呢?

1、写个冒泡排序,用递归肯定不合适,因为操作的方法不具备可迭代性,比如A是B的上层,只要A比B大就行,然后B下面又有C,B负责执行找出B和C最大的就行,这样就像一个树的关系,上层只需要关注和他下层的一个集合的比较,然后把任务不断往下分发,相反,快速排序就很满足这样的特性,所以递归就是这样不断迭代放大的过程,比如经典的N!的计算

2、递归的具体实例,比如查找某目录下的所以文件,目录嵌套目录,这就满足1中的不断递归的演进,我写个测试程序:

用golang查找目录下文件

func Glob(pattern string) (matches []string, err error) {
	if !hasMeta(pattern) {
		if _, err = os.Lstat(pattern); err != nil {
			return nil, nil
		}
		return []string{pattern}, nil
	}

	dir, file := Split(pattern)
	switch dir {
	case "":
		dir = "."
	case string(Separator):
		// nothing
	default:
		dir = dir[0 : len(dir)-1] // chop off trailing separator
	}

	if !hasMeta(dir) {
		return glob(dir, file, nil)
	}

	var m []string
	m, err = Glob(dir) //递归就发生在这里
	if err != nil {
		return
	}
	for _, d := range m {
		matches, err = glob(d, file, matches)
		if err != nil {
			return
		}
	}
	return
}

3、递归模型和mapreduce模型比较:

mapreduce模型的map阶段是不断的划分,然后计算,然后合并,然后递归则是数据查找计算的不断迭代演进,每一步都包含一组计算,然后像滚雪球一样,不断的扩散这个过程


4、递归和一般循环

循环只是线性操作,没有上下包含关系,比如递归就是可以让函数,和函数中递归的函数有包含关系


5、函数式语言

函数式语言就是用递归进行循环,比如Erlang,Scala,F#,以及始祖Lisp等等



漫谈递归

标签:

原文地址:http://my.oschina.net/yang1992/blog/523921

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!