【C语言】函数递归之详解

目录

一、函数递归的概念

1.概念

2.必要条件

二、函数递归的应用举例及解释

1.计算n的阶乘

2.依次打印输入数的各位


一、函数递归的概念

1.概念

  递归即函数调用自身的编程技巧,即自己调用自己。递归,有递有归,递即递推,归即回归。先递后归。

  少量多次的重复计算使用递归可以大大减少代码量。

 关键目的:把大事化小。

2.必要条件

  存在限制条件,当满足限制条件时,递归不再继续;

  每次递归调用后都越来越接近这个限制条件。

注:若没有限制条件,则会一直调用,导致栈溢出

例如:

#include <stdio.h>

int main()
{
    printf("haha\n");
    main();

    return 0;
}

二、函数递归的应用举例及解释

1.计算n的阶乘

#include <stdio.h>
int factorial(int n)
{
	if (n == 1)
	{
		return 1;//1的阶乘等于1
	}
	return n * factorial(n - 1);//每个大于1的数的阶乘都等于该数与上一个数的阶乘相乘
}

int main()
{
	int num = 0;
    scanf("%d", &num);

	int x = factorial(num);
	printf("%d\n", x);

	return 0;
}

假设num=5,则 5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1 =120

即5!=5*factorial(4) =5*4*factorial(3) =5*4*3*factorial(2) =5*4*3*2*factorial(1) =5*4*3*2*1 =120

此题中的“递” 体现在层层调用,直至n=1时返回1,然后再层层回归,每个函数的返回值依次回归,得到5!=120。

2.依次打印输入数的各位数

#include <stdio.h>

void print(int n)
{
	if (n > 9)
	{
		print(n / 10);
	}

	printf("%d ", n % 10);//打印结果为顺序
	//若printf语句在if前面,则打印出来的结果为逆序
}

int main()
{
	int num = 0;
	scanf("%d", &num);

	print(num);
	return 0;
}

 当n>9(即输入的数不是个位数)时,调用print函数本身,参数为原始形参/10,越来越靠进个位数,直至参数<=9时,打印该参数%10;打印之后原路返回(回归),依次打印上一个print函数中的n%10,直至最开始的print函数,结束。

假设输入的数为1234,则依次调用print(1234),print(123),print(12),print(1),当形参为1时,不再继续调用该函数,而是执行print(1)中的printf语句打印1,而后回归至函数print(12)中的if语句(已经执行完毕),然后执行printf语句打印2,。。。依次类推,直到执行print(1234)printf语句打印4,函数调用结束,屏幕上依次打印出了1 2 3 4,达到题目要求。

    

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值