zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

83. 递归函数输出是什么,为什么? #133

Open zlx362211854 opened 5 years ago

zlx362211854 commented 5 years ago

function foo(i) { if (i < 0) return; console.log(i); foo(i - 1); console.log(i); } foo(3);

zlx362211854 commented 5 years ago

输出顺序为:3,2,1,0,0,1,2,3

一张图解释

image

尾递归优化

鉴于递归函数的这一特性,我们在递归时,需要考虑尾递归优化。 什么是尾递归优化?

若一个函数在尾位置调用本身(或是一个尾调用本身的其他函数等),则称这种情况为尾递归,是递归的一种特殊情形。而形式上只要是最后一个return语句返回的是一个完整函数,它就是尾递归。 举个例子,实现一个阶乘函数:

goldEli commented 5 years ago

输出顺序:3,2,1,0,0,1,2,3

递归函数不停地调动自身并押入栈中执行,如下动图:

2