函数递归讲解

递归:递归作为一种算法在程序设计中被广泛使用,一个函数或者过程在其定义或者使用过程中有直接或者简介调用自己的方法就叫做递归。更通俗的理解就是函数自己调用了自己就称为函数递归,递归可以大大减少代码量。

函数递归的思想在于把大事化小,小事化了。接下来让我来看一个十分基础的递归代码:

int main()
{
    printf("hehe\n");
    main();
    return 0;
}

运行结果:无限循环打印hehe

由以上代码引出递归的两个必要条件:1.存在限制条件,满足限制条件递归结束。2.每次递归调用越来越接近这个限制条件。接下来让我们通过实例来进一步理解递归:

输入一个整数,打印整数的每一位:

void print(int n)
{
    if (n > 9)
    {
        print(n / 10);
    }
    printf("%d ", n % 10);
}
int main()
{
    int num = 0;
    scanf("%d", &num);
    print(num);
    return 0;
}

运行结果:

这个题目的基本思想是:使用自创的print函数来打印整数每一位,我们得到最后一位只需要用123%10就可以拿到3,然后顺序一次取模拿到每一位,然后打印。接下来为大家画图方便理解代码。(画图质量比较一般望大家见谅,基本思路清晰即可)

当整数大于9的时候就进行整数除以10的递归,直到小于久,进入printf函数开始打印。如果大家理解了博主还为大家准备了几个相对简单的递归实例并附上代码,小伙伴们可以自己尝试着实现用递归去解决问题。

1.斐波那契数
long long  Fac(int n)
{
    if (n < 3)
        return 1;
    return Fac(n - 1) + Fac(n - 2);
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    long long  ret = Fac(n);
    printf("%d", ret);
    return 0;

}

2.

n的k次方
long long Pow(int n, int k)
{
    if (k == 0)
        return 1;
    else 
        return n * Pow(n, k - 1);
}
int main()
{
    int n = 0;
    int k = 0;
    scanf("%d %d", &n, &k);
    long long ret = Pow(n, k);
    printf("%d", ret);
    return 0;
}

3.

阶乘
int Fact(int n)
{
    if (n <= 1)
    {
        return 1;
    }
    else
    {
        return n * Fact(n - 1);
    }
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    int ret = Fact(n);
    printf("%d", ret);
    return 0;
}

4.

strlen的实现
int my_strlen(char* str)
{
    if (*str == '\0')
    {
        return 0;
    }
    else
        return 1 + my_strlen(1 + str);
}
int main()
{
    char arr[] = "abcdegf";
    int ret = my_strlen(arr);
    printf("%d", ret);
    return 0;
}

希望本篇文章能让大家对递归有更深的认识,能够帮助大家学会函数递归。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值