浅谈递归

 

把每一层递归函数化分为三部分:第一部分:是递归调用前的一些数据处理,判断以及递归结束判断(当然了结束条件肯定在递归调用前,要不每次递归就不会结束了);

第二部分:就是递归函数本身了;而第三部分:当然就是递归函数的后续处理代码了!

在这里我想我们得想明白一件事情了,每一层的函数都是在上一层递归函数结束时才返回的然后接着处理该层递归函数剩下的部分!
不过我觉着最重要的还有一样就是有时候不必刻意去关注的那么细,也要有全局观。

例如我们只需要知道函数reverse()是继续处理同样的功能,没必要再去想这个函数里面又是怎么样怎么样的,我感觉肯定会抓狂的!
另外,递归的使用条件:
  存在一个递归调用的终止条件;
  每次递归的调用必须越来越靠近这个条件;只有这样递归才会终止,否则是不能使用递归的!

 

递归的基本原理:
  1 每一次函数调用都会有一次返回.当程序流执行到某一级递归的结尾处时,它会转移到前一级递归继续执行.
  2   每一级的函数调用都有自己的局部变量.
  3 递归函数中,位于递归调用语句后的语句的执行顺序和各个被调用函数的顺序相反。即位于递归函数入口前的语句,右外往里执行;位于递归函数入口后面的语句,由里往外执行。
  4 虽然每一级递归有自己的变量,但是函数代码并不会得到复制.
  5 递归函数中必须包含可以终止递归调用的语句.

一旦你理解了递归(理解递归,关键是脑中有一幅代码的图片,函数执行到递归函数入口时,就扩充一段完全一样的代码,执行完扩充的代码并return后,继续执行前一次递归函数中递归函数入口后面的代码)

阅读递归函数最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。如果你的每个步骤正确无误,你的限制条件设置正确,并且每次调用之后更接近限制条件,递归函数总是能正确的完成任务。

 

 

posted @ 2015-12-26 22:00  xfei.zhang  阅读(498)  评论(0编辑  收藏  举报