zoukankan      html  css  js  c++  java
  • 递归的优点和缺点

    栈的大小是固定的,这也就意味着不能无限的递归。递归到某些时候,栈顶将会没有更多空间

    来添加新的栈顶—就好像橱柜的空间被挤满,不能增加一个盘子一样

    void recurse()
    {
        recurse(); //函数调用其自身
    }
    int main()
    {
        recurse();//开始递归
    }
    //最终 栈空间会消耗一空,程序将因栈溢出而崩溃

    函数相互递归,以阶乘为例:

    int factorial_odd (int x)
    {
        if(x == 0)
        {
            return  1;
        }
        return factorial_even(x-1);
    }
    
    int factorial_even(int x)
    {
        if(x == 0)
        {
            return 1;
        }
        return factorial(x-1);
    }
    int factorial(int x)
    {
        if(x%2==0)
        {
            return factorial_even(x);
        }
        else
        {
            return factorial_odd(x);
        }
    }
    //基线条件没有防负数输入 ,即使调用factorial(-1)会导致这样的
    //调用栈 factorial(-1000))

    递归需要做许多函数调用,每个函数调用都需要设置有一个栈帧,并传递参数,这些都增加了时间开销,而这些开销循环中没有。绝大多数情况下,现代计算机

    中这些开销影响并不显著。但如果你的代码频繁执行(比如短时间内执行百万次甚至上亿次),你必须关注函数调用性能的问题

    递归比循环更加强大的地方在于,递归函数维持着一个保存每次递归调用当前状态的栈,允许函数获得子问题的结果后继续处理。

    递归算法:将问题分解成更小的版本的相同问题,从而解决问题。

  • 相关阅读:
    种类并查集
    因式分解
    最长递增(不减)子序列
    C++之算法题模板
    线段树
    C++之环境搭建
    C++之vector用法
    逆序数以及右边更小数的个数
    Unity3d之动态连接Mesh Renderer和Collider
    Matlab之字符串处理
  • 原文地址:https://www.cnblogs.com/tchjs/p/4428153.html
Copyright © 2011-2022 走看看