从归纳推理看递归函数

递归(Recursion):允许一个函数调用自身,这种过程被称为递归
记得在学习栈的时候学习的递归,当时只是走马观花,没有细致的思考,工作一段时间后,遇到问题后才想起来梳理
递归的应用也是非常多的,例如: 树相关的数据结构和算法中,大多数算法都是用递归实现的。
如下代码树的销毁的代码

void destroy_bstree(BSTree tree)
{
    if (tree==NULL)
        return ;

    if (tree->left != NULL)
        destroy_bstree(tree->left);
    if (tree->right != NULL)
        destroy_bstree(tree->right);

    free(tree);
}

递归的实现是使用了系统的栈空间,递归会让代码看起来简洁,但是效率并不高。那么递归和归纳推理有什么联系那?
来复习一波归纳推理,哈哈哈 三段论

如果 k = 1时  结论成立
假设k = n时   结论成立
证明k = n+1时  结论也成立

那么我们用这个方式来看验证递归试一试啊!来个例子

int fac(int x)
{
    if(x < = 1)
    {
        return 1; //当 x = 0,1 时,1! =1 成立
    }
    return x * fac(x - 1) //假设f(x-1)是正确的, f(x) = x * f(x-1)当然正确啊 x! = x * (x-1)!
}

这种方法对于尾递归和非尾递归都是成立的,我们在写递归的时候,也可以应用这种思想,
我们写递归的时候主要注意两点,1.终止条件 2.数据处理流程。这两点和我们归纳推理也是契合的,大家可以尝试一下写几个递归玩玩啦!

猜你喜欢

转载自blog.csdn.net/bin_zhang1/article/details/80915335