关于递归
2015-08-08 16:23
141 查看
什么是递归?
任何函数调用自己都叫做递归,不管是直接的还是间接的,递归方法通过调用自己来解决一个问题的一部分。这就叫递归步骤。递归步骤一般会引发一系列的递归(当然了这是废话,不然就不叫做递归了)。这里面有一个重要的点就是要确保你的递归函数有个终止条件(不然的话就出不来了)。每一次的递归都是解决原问题的一个小问题,并且这个小问题是原问题的一个副本(像套娃一样,一层比一层小但是除了代销其他方面都很相似),一系列的小问题解决后必须能解决最终要解决的问题(也是废话,想看到套娃里面的东西,你要一层一层的打开看,最终才能看到里面是什么)。
为什么要用递归呢?
递归是从数学中借用的方法。因为有些问题用递归写出来的代码比循环代码要短小,一般来说,循环代码在编以或是解释后都回变成递归结构。对于可分成一系列相似的子任务的任务,递归使用起来就很方便了。例如:排序,搜索,遍历等问题都有相应的递归解决方法。
递归函数的格式
递归函数通过调用自己来解决一个任务的子任务。到某个点,函数遇到的子任务它再不需要调用自己就能解决的时候(类似打开到最后一层),这一层叫做base case,相应的前面的都要调用自己的子任务也有名字,叫做recursive case。下面句式递归函数的一般形式:
任何函数调用自己都叫做递归,不管是直接的还是间接的,递归方法通过调用自己来解决一个问题的一部分。这就叫递归步骤。递归步骤一般会引发一系列的递归(当然了这是废话,不然就不叫做递归了)。这里面有一个重要的点就是要确保你的递归函数有个终止条件(不然的话就出不来了)。每一次的递归都是解决原问题的一个小问题,并且这个小问题是原问题的一个副本(像套娃一样,一层比一层小但是除了代销其他方面都很相似),一系列的小问题解决后必须能解决最终要解决的问题(也是废话,想看到套娃里面的东西,你要一层一层的打开看,最终才能看到里面是什么)。
为什么要用递归呢?
递归是从数学中借用的方法。因为有些问题用递归写出来的代码比循环代码要短小,一般来说,循环代码在编以或是解释后都回变成递归结构。对于可分成一系列相似的子任务的任务,递归使用起来就很方便了。例如:排序,搜索,遍历等问题都有相应的递归解决方法。
递归函数的格式
递归函数通过调用自己来解决一个任务的子任务。到某个点,函数遇到的子任务它再不需要调用自己就能解决的时候(类似打开到最后一层),这一层叫做base case,相应的前面的都要调用自己的子任务也有名字,叫做recursive case。下面句式递归函数的一般形式:
if( test for the base case ) return some base case value; else if( test for another base case ) return some other base case value; // the recursive case else return ( some work ) and then ( a recursive call )
相关文章推荐
- LeetCode(82)题解: Remove Duplicates from Sorted List II
- Android性能优化典范
- android服务的总结
- HDU 2473 Junk-Mail Filter(删点)
- git基本操作
- HDU 4745 Two Rabbits(区间DP)
- POJ 3278 Catch that cow
- hdu 1253 胜利大逃亡
- 干净清爽界面---资源浏览器形式的TXT阅读软件
- UVA 1423 Guess 【拓扑排序】
- Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
- 自学perl 系列1
- 二分回顾
- 【Obective-C编程开发】Objective-C之BOOL一清二楚
- C语言中关于.h文件和.c文件详细解析
- C.Stripe(Codeforces Beta Round #18 (Div. 2 Only))
- 用户'sa'登录失败(DataGridView)
- MySQL连接查询
- 部分华为校园招聘机试试题及答案(C语言版本)
- 文件描述符及其重定向的学习笔记