递归的几个应用举例

递归的核心思想就是用于自身问题相似但规模较小的问题来描述自己。

其实递归就是:

从前有座山,山里有座庙,庙里有个老和尚,老和尚在讲故事,讲什么呢?讲:从前有座山,山 里有座庙,庙里有个老和尚,老和尚在讲故事,讲什么呢?讲:从前有座山,山里有座庙,庙里有个老和尚, 老和尚在讲故事,讲什么呢?讲:…………。好家伙,这样讲到世界末日还讲不玩,老和尚讲的故事实际上就是前面的故事情节,这样不断地调用程序本身,就形成了递归。 万一这个故事中的某一个老和尚看这个故事不顺眼,就把他要讲的故事换成:“你有完没完啊!”,这样,整个故事也就嘎然而止了。

递归的特征:

1. 都有递归终止的边界条件是。

2. 除了边界条件,其它各处的定义需要用到和自身问题相似但规模较小的问题。

几个例子:

组合问题

在n个数中选取m(0<m<=n)个数,将所有组合按字典顺序输出。

下面是递归实现的代码:

 


 

排列问题

在n个数中选取m(0<m<=n)个数,将所有排列合按字典顺序输出。

只需在组合的基础上略微修改就成了排列的解决办法了。

对于组合,因为不能出现相同的数,所以每次都是从+1的位置开始,

而排列是允许出现相同的数,所以每次只需从0位置开始即可,

同时为了避免单个数字重复出现,需要一个数组,记录哪些数字是已经出现过的。

下面是递归实现的代码:

 


 

自然数分解问题:

给定自然数n,将其拆分成若干自然数的和。输出所有解,每组解中数字按从小到大排列。相同数字的不同排列算一组解。

下面是实现的代码:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值