函数的递归

本文介绍了递归的基本思想,通过计算阶乘和输出数字的各位来展示其应用。文章强调了递归的简洁性以及可能的效率问题,指出它在节省编程时间的同时也可能导致计算复杂性增加。
摘要由CSDN通过智能技术生成

1.递归思想:

把一个复杂的问题拆分成一个一个小的问题,直到小的问题不能再被拆分。

递是传递的意思,归是回归的意思,下文举例说明。

1条件:

(1)递归存在条件,当不满足这个条件时就停止递归 。

(2)每一次递归都会越来越接近限制条件。

2.举例

1.1计算一个数的阶乘

(1)一个数的阶乘是从1开始一直乘到这个数为止,例如5!=1*2*3*4*5,n!的阶乘就是n*(n-1)*(n-2)*........*1,这是一道数学问题,要把他转化为编程逻辑,一般 先想到的是循环,从1一开始一直乘到n结束,使用递归也同样简单,如图

利用这种方法完成递归,首先创建一个子函数Fact()

子函数分析

最后完成主函数:

#include<stdio.h>


int Fact(int n)
{
	if (n == 1)
	{
		return 1;
	}
	return n * Fact(n-1);
}
int main()
{
	int a;
	scanf("%d", &a);
	printf("%d", Fact(a));
	return 0;
}

2.输出一个数的各位数字

例如1234,执行后输出1 2 3 4

要想得到1 2 3 4可以从取余的方法开始下手,1234%10=4,

1234/10=123,123%10=3,

123/10=12,12%10=2,

12/10=1,10%10=2,

1<10,取余自然是1本身

 我们可以想到每次把a取余的数放在一个数组中,最后在逆序打印这个数组,这个办法简单,但是执行起来编写的代码较多,较为麻烦,此时利用递归可以刚好解决这个问题

先完成子函数的构建

void Print(long n)
{
    if(n>9)
    {
        Print(n/10);
    }
    printf("%d ",n%10);
}

要想完成1234的分离,首先把4分离出来,其次在分离3,一直分离到1,传递参数进入子函数,1234>9,在进入123,,123也大于9,进入12,还是大于9,在进入1,1<9,递归结束,首先完成1的打印,返回上一次,实现分离2的打印,在返回上一次,完成分离3的打印,最后完成分离4的打印。

利用图来解释更为直观一些,函数递归一直执行到限制条件为止,正如开头所说,执行到1为止,依次回归,打印各位数字

最后完成程序

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

3.总结:递归往往只含少量的代码,却能执行复杂的计算,一定程度上为程序员节省了时间,但是递归有时也有缺点,计算过程复杂导致计算慢,更多的需要程序员去探索

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花花篱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值