【C语言笔记10】函数递归(递归的含义 、 递归的限制条件、 递归的举例)


所有运行结果均在编译器VS2022,Debug,x86的环境下得出

一、什么是递归

  • 递归中的递就是递推的意思,归就是回归的意思。
  • 递归的过程就像是剥洋葱一样。把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。
  • 递归的思考方式是把⼤事化⼩的过程。

二、递归的限制条件

  • 递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。
  • 每次递归调⽤之后越来越接近这个限制条件。

三、递归的举例

1.举例1:求n的阶乘

  • 计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘。

1.1题目分析

首先,我们知道n的阶乘的公式:n! = n ∗ (n − 1)!

  • 举例:
  • 4! = 4 * 3 * 2 * 1
  • 3! = 3 * 2 * 1
  • 所以:4! = 4 * 3!

这样的思路就是把⼀个较⼤的问题,转换为⼀个与原问题相似,但规模较⼩的问题来求解的。
稍微分析⼀下,当 n<=1 的时候,n的阶乘是1,其余n的阶乘都是可以通过上述公式计算。
则n的阶乘的递归公式如下:
在这里插入图片描述

1.2代码实现

那我们就可以写出函数Fact求n的阶乘,假设Fact(n)就是求n的阶乘,那么Fact(n-1)就是求n-1的阶
乘,函数如下:

int Fact(int n)
{
	if (n == 0)
		return 1;
	else
		return n * Fact(n - 1);
}

将代码进行测试:

#include<stdio.h>
#include"Fact.h"
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fact(n);
	printf("%d\n", ret);
	return 0;
}

测试结果如下:
运行结果

2.举例2:顺序打印⼀个整数的每⼀位

  • 输⼊⼀个整数m,打印这个按照顺序打印整数的每⼀位。
  • ⽐如:
    输⼊:1234 输出:1 2 3 4
    输⼊:520 输出:5 2 0

2.1题目分析

这个题⽬,放在我们⾯前,⾸先想到的是,怎么得到这个数的每⼀位呢?

  • 如果n是⼀位数,n的每⼀位就是n⾃⼰
  • n是超过1位数的话,就得拆分每⼀位
  • Print(1234)就可以拆分为两步:

1.Print(1234/10) //打印123的每⼀位
2.printf(1234%10) //打印4

完成上述2步,那就完成了1234每⼀位的打印
那么Print(123)⼜可以拆分为Print(123/10) + printf(123%10)

   Print(1234)
==>Print(123)                  + printf(4)
==>Print(12)         + printf(3)
==>Print(1) + printf(2)
==>printf(1)

直到被打印的数字变成⼀位数的时候,就不需要再拆分,递归结束。

2.2代码实现

那我们就可以写出函数Printf,顺序打印n的每一位,假设Printf(n)就是顺序打印n的每一位,那么Printf(n-1)就是顺序打印n-1的每一位,函数如下:

int Printf(int n)
{
	if (n > 9)
	{
		Printf(n / 10);
	}
	printf("%d ", n % 10);
}

将代码进行测试:

#include<stdio.h>
int Printf(int n)
{
	if (n > 9)
	{
		Printf(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	Printf(n);
	return 0;
}

测试结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹小白的学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值