数据结构和算法

递归

2018-10-13  本文已影响5人  seniusen

1. 何为递归?

递归在我们的生活中其实很常见。假设你去电影院看电影,黑漆漆一片,你不知道自己来到了第几排,于是你问前面的人他是第几排,知道了前面的人是第几排,加一也就是你所在的排数。但前面的人也不知道,于是他也继续向前问,直到第一排的人回答他在第一排,然后再依次往后传,最后你就知道了你现在位于第几排。


2. 递归满足的条件?


3. 实现递归的关键?


4. 递归的注意事项?

针对这种情况,我们可以通过定义一个数据结构(比如散列表)来保存已经求解过的值,当递归调用时,我们先查看当前值是否被计算过,如果是,则直接从散列表中取值返回,来避免重复计算。

我们可以用尾递归来确保最后一步只调用函数自身,优化堆栈使用。以求 5 的阶乘为例,尾递归的调用过程如下所示,fact_tail(5, 1) > fact_tail(4, 5) > fact_tail(3, 20) > fact_tail(2, 60) > fact_tail(1, 120),四次递归调用后直接返回结果。

int fact_tail(int n, int a)
{
    /*Compute a factorialina tail - recursive manner.*/
     
    if (n < 0)
        return 0;    
    else if (n == 0)
        return 1;    
    else if (n == 1)
        return a;
    else
        return facttail(n - 1, n * a);
 
}

5. 递归与循环?


获取更多精彩,请关注「seniusen」!


seniusen
上一篇 下一篇

猜你喜欢

热点阅读