递归

递归是一种方法在执行过程中调用自身的技术,需具备明确的递归结束条件以避免无限循环。递归虽简洁但效率较低,可能导致栈溢出。递归包含出口条件、一般情况的演变和初始条件。常见应用包括数列求和、斐波那契数列、阶乘计算、汉诺塔问题和八皇后问题等。
摘要由CSDN通过智能技术生成

递归

-递归就是方法里调用自身
-在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口
-递归算法解题通常显得很简洁,但递归算法解题的运行效率较低
-在递归调用的过程中,系统为每一层的返回点、局部变量等开辟了栈来存储。递归次数过多容易造成栈溢出等
-具体地说,如果递归函数调用自己,则被调用的函数也将调用自己,这将无限循环下去,除非代码里有终止调用的语句。通常的方法是将递归调用放在if语句中。

递归例子:

  对递归最恰当的比喻,就是查词典。我们查词典的过程,本身就是递归。想象用一本纯英
文词典查单词,要查某一个单词的意思,翻到这个单词时,看解释,发现解释中有一个单 
词不认识,所以,无法明白这个要查的单词是什么意思;这时,再用这本词典(函数本
身) 查那个不认识的单词,又发现查的第2个单词的解释中又有一个单词不认识,那么,
又再用 这本词典查第3个不认识的单词,这样,一个一个查下去,直到解释中所有单词都
认识,这 样就到底了,就明白了最后一个单词是什么意思,然后一层一层倒回来,就知道
我最初想查 的第1个单词是什么意思了,问题就解决了。 
void function(arg1){
     statements1
     if(condition){  //condition为false,则终止调用,递归链断掉         
         function(arg2)
       }
      statements2
 } 

只要if语句为true,每个function()调用都将先执行statements1,然后再调用 function(),而不会执行statement2。当前调用结束后,程序控制权将返回给调用它的 function(),而该function()将继续执行statement2部分,然后结束,并将控制权返回给前 一个调用,以此类推。
在这里插入图片描述递归的3个主要的点:
(1)出口条件,即递归“什么时候结束”,这个通常在递归函数的开始就写好
(3)如何由"情况n" 变化到"情况n+1",也就是非出口情况,也就是一般情况 ——"正在"递归中的情况
(3)初始条件,也就是这个递归调用以什么样的初始条件开始

递归的基本思想 :

  是广义地把规模大的问题转化为规模小的相似的子问题或者相似的子问题集合来解决。
 广义针对规模的,规模的缩小具体可以是指递归函数的参数,也可以是其参数之一。相
 似是 指解决大问题的方法和解决小问题的方法往往是同一个方法,还可以是指解决子问
 题集的各 子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值