递归是一种代码简洁实现简单的但效率不太高的处理重复计算的方法。效率不高是因为耗内存,耗内存是回溯时的重复计算,每次函数调用时参数的进栈出栈。所以,提高递归效率的方法就是减少重复计算。最简单的就是保存之前计算的结果。
举例说明,这是个常见的面试题:
对于一个递归函数w(a,b,c) 如果a< =0 or b< =0 or c< =0就返回值1. 如果a> 20 or b> 20 or c> 20就返回w(20,20,20) 如果a< b并且b< c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它别的情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)。
实现也很简单,但如果直接递归,要花费时间很长。当加上数组保存后,效率一下就提高了。
int f[A][B