递归

标准没有说递归需要用堆栈实现,但是很多编译器都是这样

逆序实现上使用递归比较合适。

尾部递归

阶乘和斐波那契数并不适合递归,前者无好处,后者效率很低。

阶乘

//阶乘递归
long
factorial(int n){
    if(n <= 0)
        retrun 1;
    else
        return n * factorial(n - 1);
}

如果仔细观察实现的递归函数,发现递归调用的时机是函数的最后,此时可以用一种循环实现:

//阶乘迭代
long 
factorial(int n){
    int result = 1;
    while(n > 1){
        result *= n;
        n -= 1;
    }
    return result;
}

斐波那契

甚至斐波那契已经可以用公式表示了:https://blog.paulhankin.net/fibonacci/

Last updated

Was this helpful?