归藏第九

赋曰

江河赴海,叶落归根;术行至简处,亦须知止。递归者,自召其名也。貌若回环,实每进一阶:数递减,列渐短,树趋空。既有归处,则层层收束;若无止境,则调用相仍,栈深而机困。故递归之道,一曰基,一曰进;基定其终,进近于基。

豫言之顶层术,欲自见其名,先悬类型之契。契在前,则定义虽未尽,编译器已知其所当为;术中召己,不致迷名。若递归只供一隅,不欲昭告全篇,则以 递归虑 纳之;写其名,著其类型,陈其定义,末在 后用之。或显于堂,或藏于室,所循同理。

解章

顶层递归之术,须先声明其类。阶乘曰:

「阶乘」乃化「整数」而「整数」也。
「阶乘」者会「数」而
    若「等」于「数」于「零」
    则「一」
    否则「乘」于「数」于(「阶乘」于(「减」于「数」于「一」))也。

数为零者,返一,是其基也;否则化为数减一之较小问,是其进也。全篇曰:

寻观「标准库」之书。

「阶乘」乃化「整数」而「整数」也。
「阶乘」者会「数」而
    若「等」于「数」于「零」
    则「一」
    否则「乘」于「数」于(「阶乘」于(「减」于「数」于「一」))也。

「打印行」于(「整数表示」于(「阶乘」于「六」))。

其出七百二十。同例见归藏。豫

藏递归于句

递归但供一式者,可不列之篇首,而用 递归虑

递归虑「求零」其化「整数」而「整数」者
    会「数」而
        若「等」于「数」于「零」
        则「零」
        否则「求零」于(「减」于「数」于「一」)
而
    「求零」于「三」

后著递归值之类, 后陈其定义,末一 后乃用之。局部递归可取外层之绑定,宜为一术私有之辅算。

终止之问

类型无误,未必终有所得。编译器能验参果之类,而未必能证每次自召皆近于基。故作递归,当先自问三端:何形为基?每召所减者何?凡合法之入,必能至其基乎?

阶乘若受负数,则递减而远于零。故又当定其输入之疆:或入术先验而生异常,或自制惟能表非负之类。善作递归者,不惟书其回环,亦明其所许也。

试策

「幂」,受底数与非负指数;指数为零则一,否则返底数乘指数减一时之幂。复以局部递归改写之,使辅术不显于篇外。