递归的四条基本法则!
一、基准情形:
必须总有某些基准情形,它无须递归就能解出。
理解起来很简单,递归递归,就是不停的调用同一段函数代码,如果不设置一个出口,那便没有办法停止递归而导致内存爆满而程序崩溃。
e.g
1 int Bad(unsigned int N) 2 { 3 if(N==0) 4 { 5 return 0; 6 } 7 else 8 { 9 return Bad(N/3+1)+N-1; 10 } 11 }
当N=1的时候就没有出口,而是不断的递归N=1这段代码。
二、不断推进:
每次递归都必须朝着基准的方向前进,就像查英译英的字典一样,查一个我们不会的词的时候又在解释中碰到不认识的词,就要继续查下去,但最后,肯定有一个我们不需要查就认识的单词,此时倒退过来就能明白最初查的词的意思,所以递归一定要朝基准情况前进。
三、设计法则:
即在需求内,所有的可能都要实现。
四、合成效益法则:
因为系统每次递归是要通过开一个固定大小的不相同的内存空间的,所以尽力保证在求解同一问题的同一实例时,切勿在不同的递归调用钟做重复性的工作。