zoukankan      html  css  js  c++  java
  • 关于递归

    1.什么是递归?

      递归(Recursion):(递区---归来)  方法直接或间接调用自身


    2.递归的两个条件

      递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件

      (1)子问题与原问题为同一类型

      (2)有一个终止条件

    3.递归例子

      斐波那契数列,阶乘,树(定义和相关操作)

    4.递归与迭代

    计算阶乘:

    递归实现:

    1 int factorial (int n) {
    2     if (n == 1) {
    3         return 1;
    4     } else {
    5         return n*factorial(n-1);
    6     }
    7 }   

    迭代实现:

    1 int factorial (int n) {
    2     int product = 1;
    3     for(int i=2; i<n; i++) {
    4         product *= i;
    5     }
    6     return product;
    7 }

    迭代有这样几个条件:1、有一个有初始值的变量。2、一个说明变量值如何更新的规则。3、一个结束条件。(循环三要素:循环变量、循环体和循环终止条件)。

    首先分析递归,其实递归最大的有点就是把一个复杂的算法分解成若干相同的可重复的步骤。所以,使用递归实现一个计算逻辑往往只需要很短的代码就能解决,并且这样的代码也比较容易理解。但是,递归就意味着大量的函数调用。函数调用的局部状态是用栈来记录的。所以,这样就可能浪费大量的空间,如果递归太深的话还有可能导致堆栈溢出

    接下来分析迭代。其实,递归都可以用迭代来代替。但是相对于递归的简单易懂,迭代就比较生硬难懂了。尤其是遇到一个比较复杂的场景的时候。但是,代码的难以理解带来的有点也比较明显。迭代的效率比递归要高,并且在空间消耗上也比较小。

  • 相关阅读:
    C++学习基础十六-- 函数学习笔记
    OpenGL ES平移矩阵和旋转矩阵的左乘与右乘效果
    C++学习基础十五--sizeof的常见使用
    C++学习基础十四——基础类型vector
    XDGE_DefalutLit 物理渲染总结-01
    XDGEUnity XDGEPipeLine
    XDGE Render-启程
    一次BSSDF引发的惨案----搬家狂删除
    XDGE_RayMarchine 1- 利用Frag Shader绘制图形
    XDGE_AccelerationAlgorithms 01
  • 原文地址:https://www.cnblogs.com/midiyu/p/8192281.html
Copyright © 2011-2022 走看看