• java递归


    举个例子:

     从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:“ 从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:“ 从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:从前有座山,山中有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:“太困了不讲了”,于是都回去睡觉了。”于是都回去睡觉了”于是都回去睡觉了。”于是都回去睡觉了。

    我用不同颜色标记处来了每一层的对应关系,

    很明显地看出颜色从头开始往中间逐渐变化,然后到一定程度(我们称之为递归的边界或是结束条件)就从内二外的层层返回。——这就是递归

    类似于剥洋葱,一层套着一层,直到掰到最里层。
     

    什么是递归

    递归,就是在运行的过程中调用自己。

    就比如假设我们现在都不知道什么是递归,我们自然想到打开浏览器:输入到谷歌的网页,点击搜索递归,然后在为维基百科中了解到了递归的基本定义。在了解到了递归实际上是和栈有关的时候,你又蒙圈了,什么是栈呢?数据结构没学清楚,此时的你只能又打开谷歌,搜索什么是栈。接下来你依次了解了内存/操作系统。在你基本了解好知识之后,你通过操作系统了解了内存,通过内存了解了栈,通过栈了解了什么是递归这下你恍然大悟!原来这就是递归啊!

    递归的思想

    递归的基本思想是某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符合条件的子问题,而不需要过分关注这个子问题是如何被解决的。

    构成递归需具备的条件:
    1. 子问题须与原始问题为同样的事,且更为简单;
    2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

    举例:

    计算N的阶乘

    1. public static void main(String[] args) {
    2. int n=6;
    3. int c=f(n);
    4. System.out.println(c);
    5. }
    6. public static int f(int n){
    7. if(n==1)
    8. return 1;
    9. return n*f(n-1);
    10. }

    递归的缺点

    在程序执行中,递归是利用堆栈来实现的。每当进入一个函数调用,栈就会增加一层栈帧,每次函数返回,栈就会减少一层栈帧。而栈不是无限大的,当递归层数过多时,就会造成 栈溢出 的后果。

    递归与循环的区别

    递归 是以空间换取时间
    循环 是以时间换取空间(能用循环的地方 别用递归)

    什么时候用递归

    当一个问题可以划分为若干类似的子问题,而子问题也可再划分时就可以用递归。比如杨辉三角、计算阶乘

    总结

    1.找重复:

     找到递推公式或者等价转换 这些都是父问题转化为求解子问题

    2.找变化的量:变化的通常要作为参数

    3.找出口

    注: 新手上路,请多多指教。

     

  • 相关阅读:
    [C/C++]_[中级]_[static_cast的详细解析]
    java-php-python--损失赔偿保险的客户情况登记及管理-计算机毕业设计
    【操作系统】实验CPU Scheduling--附讲解视频
    计算机网络:3数据链路层
    信号量临界区保护
    学会Redis这一篇就够了(1)
    js网络请求---fetch和XMLHttpRequest的用法
    QT(1)- QString
    读周岭《认知觉醒》第一次有感
    网上赚钱的人其实都具备老板的思维
  • 原文地址:https://blog.csdn.net/weixin_48031392/article/details/126368922