函数递归的学习

经过一系列的学习,我们已经学会了创建和使用函数,在这个过程当中我们知道函数是可以相互调用的,那么,函数可不可以调用自己呢?这就是我们今天要学习的内容

1.什么是递归

递归是一种解决问题的思想,它是一种将大事化小,小事化了的思想,将一个复杂庞大的问题分解,找到一个可以重复的过程,并设置结束的标志,就可以将问题简单化。

那生活中的事情举个例子:要我们计算n!在n很大时可能不能一下子将这个数计算出来,而通过递归的思想就可以很好地解决问题。虽然我们不知道n!但我们知道它等于(n-1)!*n,经过这样一个过程我们就把一个题化简了一点点。之后就可以比葫芦画瓢,将这个问题一步步拆解,最后就把所有的!符号去掉了,只剩下数据的相乘计算。

就像给你一个洋葱要求你取出洋葱心一样,你需要一层一层地剥,才能最终解决问题,这就是递归的神奇

将其转换成代码就可以写成这样

#include <stdio.h>
int cal(int n)
{
    if(n==1)
    return 1;
    else
    return n*cal(n-1);
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int res = cal(n);
    printf("%d",res);
    return 0;
}

2.递归的限制条件

经过上面的例子,大家就可以试着分析可以用递归解决的问题的特点,并以此推出递归的限制条件了。

1.递归会在一定条件下停下来

2.在每一次递归调用过后,需要逼近递归停止的那个条件

这样的两个条件其实很好理解,既然要解决问题,那我们肯定需要递归结束的条件标志着问题的解决,而每一次逼近那个条件才会让我们不会离目标背道而驰

3.递归与迭代

递归解决问题这么方便,那么有没有什么弊端呢?

有的兄弟,有的,在进行递归操作时,计算机会一层一层地调用函数,这时产生的数据是很庞大的,呈现指数型增长的趋势,简单来说就是很占用内存。

而迭代就是我们所说的循环,一般上来讲对于空间的占用少,计算快,在这方面就占据优势,但显然不如递归书写出的代码简洁

最直观的比较:

拿计算斐波那契数列第n位的数字大小来说,使用递归的方法,每一次递归调用都会需要前面两次的数据,这样,数据就会以2指数倍增长。

相反如果是迭代或者说循环,只需要创建2个变量,让他们通过加减不断赋值就可以达到目标,占用的内存也大大缩小

这就是迭代和递归的最大区别

好了那么今天的内容就讲到这里,之后会将数据在计算机中的储存方式,让我们更好地理解计算机是如何读取,改写数据的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值