递归(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);
    }
}
相关推荐
Dovis(誓平步青云)30 分钟前
【数据结构】励志大厂版·初级(二刷复习)双链表
c语言·数据结构·经验分享·笔记·学习·算法·学习方法
姜行运2 小时前
每日算法【双指针算法】(Day 2-复写零)
c++·算法·c#
伊H5 小时前
C语言main的参数;argc与argv
linux·c语言·算法
triticale5 小时前
【数论】快速幂
java·算法
爱的叹息6 小时前
【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
java·算法·排序算法
CodeJourney.6 小时前
Python数据可视化领域的卓越工具:深入剖析Seaborn、Plotly与Pyecharts
人工智能·算法·信息可视化
Non importa7 小时前
【初阶数据结构】树——二叉树(上)
c语言·数据结构·学习·算法
Tech Synapse9 小时前
基于Surprise和Flask构建个性化电影推荐系统:从算法到全栈实现
python·算法·flask·协同过滤算法
終不似少年遊*9 小时前
国产之光DeepSeek架构理解与应用分析04
人工智能·python·深度学习·算法·大模型·ds
天天扭码9 小时前
一分钟解决 | 高频面试算法题——最大子数组之和
前端·算法·面试