递归

作者: 大龙10 | 来源:发表于2022-07-27 08:33 被阅读0次

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第8章目录

8.2 递归

1、康托尔集

  • 1883年,德国数学家格奥尔格·康托尔开发了一套用于构建无穷集合的简单规则。


2、有限递归

  • 这套规则有一个反馈回路。把一条线段分成两条线段,把得到的线段再分成两条,最终将得到4条线段。再将同样的规则作用在这4条线段上,你会得到8条线段。
  • 这种连续地在结果上重复应用某个规则的过程就称为递归。
  • 康托尔十分关心无数次作用规则后产生的结果。
    但我们只关心有限的像素空间,通常会忽略无限递归的问题。
  • 因此我们应该用代码建立一套有限递归机制,而不是无限地在结果上运用规则(这会让程序崩溃)。

3、代码实现

  • 以下代码是我们常做的事——在一个函数中调用另一个函数。
void someFunction() {
    background(0); 在函数someFunction()中调用background()函数
}
  • 如果我们在函数中调用自身,会发生什么?
    调用自身的函数称为递归函数,它能有效地解决某些特定问题。
  • 某些数学计算就是用递归实现的,最常见的例子就是阶乘。
    用更一般的方式表示,对任意正整数n,都有:
    n!=n \times (n-1)! \\ 1!=1
  • n的阶乘被定义为n乘以n-1的阶乘。阶乘的定义中也包含阶乘
int factorial(int n) {
      if (n == 1){
          return 1;
      } else {
          return n * factorial(n-1);
      }
}

4、示例

示例代码8-2 两次递归
用更复杂的方式实现drawCircle()函数:对于任意圆圈,在它的左右两边分别画一个半径减半的圆圈。

void setup() {
  size(640,360);  
}

void draw() {
  background(255);
  drawCircle(width/2,height/2,400); 
  noLoop();
}

// Recursive function
void drawCircle(float x, float y, float r) {
  stroke(0);
  noFill();
  ellipse(x, y, r, r);
  if(r > 2) {
    // Now we draw two more circles, one to the left
    // and one to the right
    drawCircle(x + r/2, y, r/2);
    drawCircle(x - r/2, y, r/2);
  }
}

5、运行结果

相关文章

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • 二叉树的遍历

    先序递归: 非递归: 中序递归: 非递归: 后序递归: 非递归 层次遍历

  • 二叉树的前序、中序、后序遍历(递归、非递归)

    二叉树 前序 递归: 非递归: 中序 递归: 非递归: 层序 递归: 非递归:

  • 树的遍历,golang实现

    先序,递归 中序,递归 后序,递归 先序,非递归 中序,非递归 后序,非递归 层序遍历

  • 3 递归(19)(方法层面的高级循环)

    递归 树的递归 其它递归

  • 递归,递归,递归

    在我告诉你什么是递归之前,你应该读一下这篇文章:递归,递归,递归。 如果你没有这么做,那么表扬一下自己。如果你那么...

  • 数据结构-树的遍历

    1. 先序遍历 递归实现 非递归实现 2. 中序遍历 递归实现 非递归实现 3. 后序遍历 递归实现 非递归实现 ...

  • 树的遍历

    节点结构: 先序遍历 递归 非递归 后序遍历 递归 非递归 中序遍历 递归 非递归 层序遍历 类库 有了上述遍历算...

  • 算法图解系列之递归[03]

    3 递归 3.1 递归<函数> 3.2 基线条件和递归条件 3.3 递归调用栈

  • 三十八、递归

    一、递归的概述 递归,指在当前方法内调用自己的这种现象。 递归分为两种,直接递归和间接递归。 直接递归称为方法自身...

网友评论

      本文标题:递归

      本文链接:https://www.haomeiwen.com/subject/tbxwirtx.html