尾递归函数是指所有递归调用都是尾调用,因此没有任何递延操作的函数。例如,gcd函数(如下图所示)是尾递归函数。相反,阶乘函数(也在下面)不是尾递归的;因为它的递归调用不在尾部位置,所以它存在递延的乘法运算,这些运算必须在最后的递归调用完成后才能执行。如果编译器或解释器将尾部递归调用视为跳转而非函数调用,那么像gcd这样的尾部递归函数将使用常量空间执行。因此,程序本质上是迭代的,相当于使用 "for "和 "while "循环等命令式语言控制结构。 | 尾递归函数是指所有递归调用都是尾调用,因此没有任何递延操作的函数。例如,gcd函数(如下图所示)是尾递归函数。相反,阶乘函数(也在下面)不是尾递归的;因为它的递归调用不在尾部位置,所以它存在递延的乘法运算,这些运算必须在最后的递归调用完成后才能执行。如果编译器或解释器将尾部递归调用视为跳转而非函数调用,那么像gcd这样的尾部递归函数将使用常量空间执行。因此,程序本质上是迭代的,相当于使用 "for "和 "while "循环等命令式语言控制结构。 |