C递归算法经典实例

一、递归的概念

递归是指函数自己调用自己,通常在解决问题时使用。在C语言中,递归实现的问题与循环实现的问题一样,只是解决问题的思路不同。

递归函数有两个重要的特点:

  • 自己调用自己,直到达到某个条件后停止
  • 必须有终止条件,否则会一直递归下去,导致栈溢出

二、递归实例:斐波那契数列

斐波那契数列是指:第一项和第二项均为1,第三项开始每一项均为前两项之和,即:1, 1, 2, 3, 5, 8, 13, ……

可使用递归函数实现斐波那契数列:


int fibonacci(int n){
    if(n <= 1){
        return n;
    }
    else{
        return fibonacci(n-1) + fibonacci(n-2);
    }
}

上述代码中,当n为1或0时,直接返回n的值,否则返回前两项之和。

三、递归实例:阶乘

阶乘是指从1到n所有整数的乘积,由于阶乘增长速度快,因此使用递归来求解。

使用递归函数求解阶乘:


int factorial(int n){
    if(n<=1){
        return 1;
    }
    else{
        return n*factorial(n-1);
    }
}

上述代码中,当n为0或1时,返回1,否则返回n乘以(n-1)的阶乘。

四、递归实例:汉诺塔

汉诺塔是一种经典问题,题目描述:有三个柱子A,B,C,在A柱子上有n个盘子,盘子大小不一,大的在下面,小的在上面。现在需要将A柱子上的n个盘子全部移动到C柱子上,移动过程中要保证大盘子在下面,小盘子在上面,且每次只能移动一个盘子。

使用递归函数实现汉诺塔:


void hanoi(int n, char a, char b, char c){
    if(n == 1){
        printf("Move disk %d from %c to %c\n", n, a, c);
    }
    else{
        hanoi(n-1, a, c, b);
        printf("Move disk %d from %c to %c\n", n, a, c);
        hanoi(n-1, b, a, c);
    }
}

上述代码中,当n为1时直接将盘子从a移动到c,否则将n-1个盘子从a经过c移动到b,将第n个盘子从a移动到c,最后将n-1个盘子从b经过a移动到c。

五、递归实例:快排

快速排序是一种高效的排序算法,使用递归可以简单实现。

使用递归函数实现快速排序:


void quick_sort(int arr[], int left, int right){
    if(left < right){
        int i = left, j = right, pivot = arr[left];
        while(i < j){
            while(i = pivot){
                j--;
            }
            if(i < j){
                arr[i++] = arr[j];
            }
            while(i < j && arr[i] < pivot){
                i++;
            }
            if(i < j){
                arr[j--] = arr[i];
            }
        }
        arr[i] = pivot;
        quick_sort(arr, left, i-1);
        quick_sort(arr, i+1, right);
    }
}

上述代码中,取最左边的数为基点,设两个指针,i从左边开始,j从右边开始,交换i和j指向的数,直到i>=j,将基点放到i的位置,再递归调用快排函数。

六、总结

递归是一种常用的编程技巧,能够解决许多问题。但是递归也存在一些缺点,如递归层数过多容易导致栈溢出等问题。在使用递归时应该注意终止条件和递归深度的控制。

原创文章,作者:CJEGR,如若转载,请注明出处:https://www.506064.com/n/333620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CJEGRCJEGR
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相关推荐

  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • Python生成随机数的应用和实例

    本文将向您介绍如何使用Python生成50个60到100之间的随机数,并将列举使用随机数的几个实际应用场景。 一、生成随机数的代码示例 import random # 生成50个6…

    编程 2025-04-29
  • Harris角点检测算法原理与实现

    本文将从多个方面对Harris角点检测算法进行详细的阐述,包括算法原理、实现步骤、代码实现等。 一、Harris角点检测算法原理 Harris角点检测算法是一种经典的计算机视觉算法…

    编程 2025-04-29
  • 数据结构与算法基础青岛大学PPT解析

    本文将从多个方面对数据结构与算法基础青岛大学PPT进行详细的阐述,包括数据类型、集合类型、排序算法、字符串匹配和动态规划等内容。通过对这些内容的解析,读者可以更好地了解数据结构与算…

    编程 2025-04-29
  • 瘦脸算法 Python 原理与实现

    本文将从多个方面详细阐述瘦脸算法 Python 实现的原理和方法,包括该算法的意义、流程、代码实现、优化等内容。 一、算法意义 随着科技的发展,瘦脸算法已经成为了人们修图中不可缺少…

    编程 2025-04-29
  • 台阶走法递归

    台阶走法递归是一个经典的递归问题,在计算机算法中有着广泛的应用。本篇文章将从递归的思想出发,详细分析如何解决这个问题。 一、递归基础知识 递归是指一个函数直接或间接地调用自身。递归…

    编程 2025-04-29
  • 神经网络BP算法原理

    本文将从多个方面对神经网络BP算法原理进行详细阐述,并给出完整的代码示例。 一、BP算法简介 BP算法是一种常用的神经网络训练算法,其全称为反向传播算法。BP算法的基本思想是通过正…

    编程 2025-04-29
  • MySQL递归函数的用法

    本文将从多个方面对MySQL递归函数的用法做详细的阐述,包括函数的定义、使用方法、示例及注意事项。 一、递归函数的定义 递归函数是指在函数内部调用自身的函数。MySQL提供了CRE…

    编程 2025-04-29

发表回复

登录后才能评论