(本人是刚入门c语言不久的小白,写的文章可能有地方不对,小白诚恳请高手赐教)
好了正文开始
1.什么是函数递归:简单来说就是自定义函数内部,自己对自己进行调用,形成一个类似于循环,但跟循环的执行过程有差异的算法。
2.函数递归的两个必要条件
(1)要有限制条件(你不设置你就死循环了)
(2)每一次调用执行越来越接近这个限制条件(换汤不换药,相当于for循环里面的i=1;i<=5;i++)
例如以下局部代码
3.函数递归对优缺点:
(1)优点:写一个复杂过程的代码简洁,写代码速率高。
(2)缺点:代码执行速率高,比如求第n个斐波那契数列的数值(因为斐波那契数列是一个数是前一个数的前一个数的和,所以导致函数递归要把同一个数重复调用多次)
小提示(不知道斐波那契数列的小白可以去百度一下,你就明白我的意思了)
3.函数递归的主要思想
函数递归的精髓就是,把一个大的问题分化成多个类似于原问题的小问题。(掌握了这个你就基本知道函数递归的写法了)
4.函数递归的常见错误
那就是stack overfllow了(栈溢出),也就是所创建的对象在内存里栈区放不下了。最常见的栈溢出原因就是因为没写限制条件,导致死循环而发生栈溢出。
注意⚠️:有些时候你写了限制条件还是会栈溢出(这里我也没法解释原因,我这个小白知道时也是懵的,有看到的大佬可以留言解释一下)
我的解决方法:直接改成循环来实现,所以我比较喜欢用循环来写。当然函数递归也有好处,反正你那个写得顺手就用那个,前提是必须要保证结果正确。
好了,函数递归本萌新就说到这里,欢迎各位道友来指导查缺补漏,我们下期见。