递归(Recursion)

递归

For some types of problems, it is useful to have functions call themselves. A recursive function is a function that calls itself either directly or indirectly through another function. Recursion is a complex topic discussed at length in upper-level computer science courses.

对于某些类型的问题,让函数调用自身很有用。 递归函数是直接或通过另一个函数间接调用自身的函数。 递归是高级计算机科学课程中详细讨论的一个复杂主题。

A recursive function is called to solve a problem. The function actually knows how to solve only the simplest case(s), or so-called base case(s) . If the function is called with a base case, the function simply returns a result. If the function is called with a more complex problem, the function divides the problem into two conceptual pieces: A piece that the function knows how to do and a piece that the function does not know how to do. To make recursion feasible, the latter piece must resemble the original problem, but be a slightly simpler or slightly smaller version of the original problem. Because this new problem looks like the original problem, the function launches (calls) a fresh copy of itself to go to work on the smaller problem --- this is referred to as recursive call and is also called the recursion step.

调用递归函数来解决问题。该函数实际上只知道如何解决最简单的情况,或所谓的基本情况。如果使用基本情况调用该函数,则该函数仅返回结果。如果针对更复杂的问题调用该函数,则该函数会将问题分为两个概念部分:函数知道如何执行的部分和函数不知道如何执行的部分。为了使递归可行,后一部分必须类似于原始问题,但是原始问题的稍微简单或稍微小的版本。因为这个新问题看起来像原始问题,所以该函数启动(调用)自身的新副本来处理较小的问题 --- 这称为递归调用 ,也称为递归步骤

斐波那契数定义:
F 0 = 0 F 1 = 1 F n = F n − 1 + F n − 2 ( n ≥ 2 , n ∈ N ) \begin{aligned} F_{0}&=0\\ F_{1}&=1\\ F_{n}&=F_{n-1}+F_{n-2}{\left(n\geq 2,n\in \mathbb{N} \right )} \end{aligned} F0F1Fn=0=1=Fn−1+Fn−2(n≥2,n∈N)

如下为递归获取第n个斐波那契数。

c 复制代码
#include <stdio.h>

unsigned long fibonacci(unsigned long n);

int main(int argc, char *argv[]) {
    unsigned long n = 0;
    printf("Enter an integer: ");
    scanf("%lu", &n);

    printf("%s%lu%s%lu\n",
            "Fibonacci(", n,
            ") = ", fibonacci(n));

    return 0;
}

unsigned long fibonacci(unsigned long n) {
    if (n == 0 || n == 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
相关推荐
绛洞花主敏明1 天前
Go切片的赋值
c++·算法·golang
10001hours1 天前
初阶数据结构.1.顺序表.通讯录项目(只有源码和注释)
数据结构·算法
Emilia486.1 天前
八大排序算法
算法·排序算法
blammmp1 天前
算法专题十九:记忆化搜索(暴搜->记忆化搜索)
算法·深度优先·记忆化搜索
MicroTech20251 天前
边缘智能的创新:MLGO微算法科技推出基于QoS感知的边缘大模型自适应拆分推理编排技术
科技·算法·ai
王哈哈^_^1 天前
【数据集】【YOLO】目标检测游泳数据集 4481 张,溺水数据集,YOLO河道、海滩游泳识别算法实战训练教程。
人工智能·算法·yolo·目标检测·计算机视觉·分类·视觉检测
巴里巴气1 天前
第73题 矩阵置零
线性代数·算法·矩阵
voice6701 天前
密码学实验二
算法·密码学·哈希算法
Blossom.1181 天前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
寂静山林1 天前
UVa 10989 Bomb Divide and Conquer
算法