小强在超市看到一套俄罗斯套娃,最大的里面套着一个中等的,中等的里面套着一个小的,最小的那个打开一看,里面什么都没有——只有一张纸条写着"到此为止"。
小强好奇地数了一下:最大的算第 1 层,中等的算第 2 层,最小的算第 3 层,一共 3 层。他问妈妈:"如果每层套娃都比上一层小一圈,那最里面那层'没有套娃'的算不算一层?"
妈妈笑着说:"当然算!没有最里面那层'到此为止',套娃就永远套不完啦。"
"一层套一层,直到碰到'最小的那个'就停 —— 套娃就是递归!"
老师笑着揭秘:程序里也有这种"一层套一层"的写法,函数自己调用自己,就叫递归函数。但和套娃一样,递归也必须有一个"最里面"的终点,否则就会永远套下去,程序就卡死了。
💡 这个故事告诉我们什么?
套娃有三个特点,也正是递归函数的三个关键:
一、每一层都"套着下一层"(函数调用自己);二、越套越小,最终会碰到"最小的那个"(基准情况,递归终止);三、套完之后,每一层都"把结果传回来"(返回值层层返回)。
程序里的递归函数也是如此:自己调用自己,逐步缩小问题规模,直到碰到最简单的情况直接返回结果,然后层层返回,最终得到答案。