前言:看了那么多的函数递归的文章,看是看懂了,但是自己开始用函数递归解决题目的时候就发现自己怎么也想不出来,那么看看这篇文章吧!希望我的理解能对你有些许帮助。
1.了解什么是函数的递归
------其实不用想的太过于麻烦,其实只需要把函数的递归理解为在一个函数(比如函数A)里面在调用自己(函数A)就可以了,如图:
这里我以大家最最最熟悉的main函数为例子(开始学习编程的时候就学的main函数),就是在main函数里面再一次调用main函数这就叫做函数的递归。
2.理解递归的四把金斧头
-------读者可以先理解一下,下文我会带着你更好的理解运用这四个理念:
(1) 函数递归是一个把复杂问题简单化的过程(大的问题-->小的问题)(这句话看起来是废话,但是非常的重要,希望读者好好记住一下)
(2) 递归递归,需要有一个终止它的条件,要不然它会一直递归下去
(3) 为了使递归停下来,就需要有不断靠近停下来这个条件的趋势(比如停止的条件使n==1,现在n==10,那么我们就需要让n减小,不断靠近 1 )
(4) 递归就会有函数,我们一定一定要知道我们这个函数的作用是什么(比如我弄一个函数Sum(n)-->这个函数的作用就是求 1 到 n 的和)(我们要时时刻刻记住这个函数是干什么用的)
3.用例子更好的理解递归
-----我们先用网上都会使用的求n的阶乘来开始理解一下四把金斧头理念的理解:
首先我们先用四把金斧头来理解一下该怎么解决这个问题:
(1) 我们要将大的问题-->小的问题(求5!太难,那么求4!,也太难了,那求3!,也太难了,那求2!,还是太难了,那求1!,哎,1!就是 1 )
(你看我们把求5!这个大问题-->求1!这个根本不用算的小问题,这就是大的问题-->小的问题,那么我们求5! 不就是 求 4!在乘 5吗,5!== 5 * 4!)
(然后同理4!= 4 * 3!,3! = 3 * 2!,2! = 2 * 1!,只要知道1!,那么就全知道了)
(2) 要有条件限制它,而且还要不断靠近这个条件(n开始为5,根据(1)n从5-->4-->3-->2-->1,这样不就是越来越靠近限制条件了吗,我们就可以知道限制条件是n==1)
(3)我们要知道我们造的这个函数是干什么用的
如图:
在重点帮助读者理解一下Sum函数里面的内容:
(1)限制条件是n==1吧,求递归我们只需要把这个问题从大化到最简,求5!,那最简不就是求1!吗,所以我们问题大化小,并且把限制条件设为n==1。
(2)Sum函数就是用来求 1*2*3*...*n 的,else后面的 return n * Sum(n - 1) 根据题目不就是求 5 * 4!吗!(其实告诉读者一个小窍门,else后面 5 * 4!== 5!对吧,其实你就不要在往深里面思考了,只要这个等式成立 5!== 5 * Sum(4),而且有Sum函数就可以了,就不要在想后面怎么怎么样了,如果题目比较难往深里面想容易越想越糊涂)
希望我的这样子的讲解能让你有更好的理解,网上有很多用画图来解释这个递归的操作流程的,但是小编认为这不好,原因是:画图理解是很好,一步一步往下递,然后在归回来,但是我们在解题的时候不可能拿个纸和笔把所有的递归流程全画出来在解题吧(仅表达个人观点),所以这就是为什么小编不让读者深思的理由
在用经常看见的斐波那契数列举一下例子吧: