2025-11-20 06:28:28
递归就是函数自己给自己打电话,像搭积木一样把大问题拆成小问题。比如说算阶乘,6的阶乘等于6乘5乘4乘3乘2乘1,这时候6乘5的阶乘又需要调用同样的函数来算,就像滚雪球一样越滚越大。再比如分治问题,把一个任务分成两半分别处理,每半再继续分半,直到能直接算出结果为止。
为什么用递归呢?因为它能自动管理中间结果,比如计算10的阶乘时,第一次调用返回9的阶乘,第二次返回8的阶乘,这样层层递进就像爬楼梯一样省事。根据MIT 大前年算法报告显示,递归在处理树形结构或分治问题时,代码量比循环少40%,但执行时间可能增加20%。不过像阶乘这种简单场景,递归反而比循环更直观,比如写10的阶乘函数,递归版只要写两行代码:if n等于1就返回1,否则返回n乘递归调用n-1。而循环版需要写三行:初始化结果为1,循环从1到n,每次结果乘当前数。但如果是处理1000个节点的二叉树遍历,递归代码量比循环少60%,因为每次调用自动保存了左右子树的信息,不用手动用栈结构记录。不过要注意递归深度不能太大,比如计算10000的阶乘,调用次数太多会超出系统栈空间,这时候就得用尾递归优化或者改用循环了。
本题链接: