6.6 递归函数

    数列如下所示:

    下面的程序可用于生成该数列(示例 6.13 ):

    输出:

    许多问题都可以使用优雅的递归来解决,比如说著名的快速排序算法。

    Go 语言中也可以使用相互调用的递归函数:多个函数之间相互调用形成闭环。因为 Go 语言编译器的特殊性,这些函数的声明顺序可以是任意的。下面这个简单的例子展示了函数 odd 和 even 之间的相互调用(示例 6.14 mut_recurs.go):

    练习 6.4

    重写本节中生成斐波那契数列的程序并返回两个命名返回值(详见第 6.2 节),即数列中的位置和对应的值,例如 5 与 4,89 与 10。

    练习 6.5

    练习 6.6

    实现一个输出前 30 个整数的阶乘的程序。

    n! 的阶乘定义为:,因此它非常适合使用递归函数来实现。

    然后,使用命名返回值来实现这个程序的第二个版本。

    最好的解决方案就是使用 big 包(详见第 9.4 节)。