C语言中的递归函数的简单应用

C语言中的递归函数的简单应用

递归函数

简介

递归函数是指在函数内部调用自身的函数。这种函数可以通过不断调用自身来解决问题,通常用于解决可以被分解为相似子问题的情况。

注意

  1. 递归函数需要有终止条件,否则会导致无限循环,消耗大量资源。
  2. 递归函数的性能可能不如迭代函数,因此在处理大规模数据时需要理性使用。
  3. 递归函数层数太多很有可能会导致栈溢出,特别是在处理大规模数据时需要注意堆栈的大小。
  4. 递归函数要注意内存的使用,避免出现内存泄漏的情况。

使用示例

求n的阶乘

分析问题:

求 n!是一个机械化的连续的单一过程,由此我们可以考虑递归函数

代码示例:

c 复制代码
long long Fact(int n) 
{ 
	if (n < 0) 
         return -1;//错误条件
     else if (n == 0 || n == 1)//基本条件
         return  1;
     else 
		return n * Fact(n-1); 
}

这里我们使用了long long 型整型尽可能的避免数据过大而造成的内存溢出。

同时,我们也应该控制递归的次数,防止栈溢出。

求Fibonacci数列

分析问题:

斐波那契数列是一个经典的数学问题,它是一个无限数列,以0和1开始,后续的每一项都是前两项的和。斐波那契数列的前几项为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...依次类推。

此函数的运算方法单一且连续,所以可以考虑递归函数

代码示例

c 复制代码
long long Fib(int n)
{
    if (n <= 0)
        return -1;//错误条件
    else if (n == 1)
        return 0;
    else if (n == 2)
        return 1;//基本条件
    else
        return Fib(n - 1)+Fib(n-2);
}

求最大公约数

分析问题:

求最大公约数的方法有两种:辗转相减法和辗转相除法。无论是哪一种方法,其实都是多次且单一的运算,所以也可以用递归函数。

代码一:辗转相减法:

c 复制代码
int gcd(int a, int b) 
{
    if (a == b)
    {
        return a;
    }
    if (a > b) 
    {
        return gcd(a - b, b);
    } else 
    {
        return gcd(a, b - a);
    }
}

代码二:辗转相除法:

c 复制代码
int gcd(int a, int b) 
{
    if (b == 0) 
    {
        return a;
    } 
    else 
    {
        return gcd(b, a % b);
    }
}

其实如果我们一步步调试代码(或手动进行递归计算),那么我们可以发现辗转相除法比辗转相减法的递归次数少,所以我们优先选择辗转相除法。

相关推荐
星轨初途41 分钟前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
f***01931 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
小曹要微笑2 小时前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
前端世界5 小时前
float 还是 double?用储罐体积计算带你看懂 C 语言浮点数的真实世界坑
java·c语言·开发语言
小青龙emmm5 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
学习路上_write6 小时前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
程序猿编码8 小时前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
charlie1145141919 小时前
深入理解C/C++的编译链接技术6——A2:动态库设计基础之ABI设计接口
c语言·开发语言·c++·学习·动态库·函数
white-persist9 小时前
【攻防世界】reverse | Reversing-x64Elf-100 详细题解 WP
c语言·开发语言·网络·python·学习·安全·php
Want5959 小时前
C/C++贪吃蛇小游戏
c语言·开发语言·c++