第1,058行: |
第1,058行: |
| 这段代码至少在某种程度上糅合了递归和迭代之间的界限。本质上,它是一个递归的实现,这是遍历文件系统的最佳方式。它也是直接递归和间接递归的一个例子。 '''<font color=''32CD32''> 方法 "rtraverse "是直接递归的例子,方法 "traverse "是则间接的,它调用 "rtraverse"。</font>'''这个例子不需要 "基本情况",因为在给定的文件系统中文件和目录的数量总是有限的。 | | 这段代码至少在某种程度上糅合了递归和迭代之间的界限。本质上,它是一个递归的实现,这是遍历文件系统的最佳方式。它也是直接递归和间接递归的一个例子。 '''<font color=''32CD32''> 方法 "rtraverse "是直接递归的例子,方法 "traverse "是则间接的,它调用 "rtraverse"。</font>'''这个例子不需要 "基本情况",因为在给定的文件系统中文件和目录的数量总是有限的。 |
| | | |
− | ==Implementation issues== | + | ==实现问题== |
− | 执行问题
| + | |
| In actual implementation, rather than a pure recursive function (single check for base case, otherwise recursive step), a number of modifications may be made, for purposes of clarity or efficiency. These include: | | In actual implementation, rather than a pure recursive function (single check for base case, otherwise recursive step), a number of modifications may be made, for purposes of clarity or efficiency. These include: |
| | | |
− | 在实际执行中,为了清晰或效率,可能会进行大量的修改,而不是纯粹的递归函数(对基本情况进行单一检查,否则递归步骤)。这些修改包括:
| + | 如果不是纯粹的递归函数(对基本情况进行单一检查,否则递归步骤),而是实际的代码实现,则为了清晰或效率起见,可能会进行大量的修改。这些修改包括: |
| | | |
| * Wrapper function (at top) | | * Wrapper function (at top) |
− | 包装函数(在顶部)
| |
| * Short-circuiting the base case, aka "Arm's-length recursion" (at bottom) | | * Short-circuiting the base case, aka "Arm's-length recursion" (at bottom) |
− | 基本情况下的短路,也就是 "正常递归"(在底部)
| |
| * Hybrid algorithm (at bottom) – switching to a different algorithm once data is small enough | | * Hybrid algorithm (at bottom) – switching to a different algorithm once data is small enough |
− | 混合算法(在底部)--一旦数据足够小,就切换到不同的算法
| + | |
| + | * 包装函数(在顶部) |
| + | * 基本情况下的短路,也就是 "正常递归"(在底部) |
| + | * 混合算法(在底部)——一旦数据足够小,就切换到另一个的算法 |
| | | |
| On the basis of elegance, wrapper functions are generally approved, while short-circuiting the base case is frowned upon, particularly in academia. Hybrid algorithms are often used for efficiency, to reduce the overhead of recursion in small cases, and arm's-length recursion is a special case of this. | | On the basis of elegance, wrapper functions are generally approved, while short-circuiting the base case is frowned upon, particularly in academia. Hybrid algorithms are often used for efficiency, to reduce the overhead of recursion in small cases, and arm's-length recursion is a special case of this. |
| | | |
− | 在优雅的基础上,包装函数一般都会被认可,而对基本情况的短路则是不屑一顾的,尤其是在学术界。混合算法往往是为了提高效率,减少小情况下递归的开销,正常递归是一种特殊情况。
| + | 在优雅简洁的基础上,包装函数一般都会被接受,而对基本情况的短路则是被轻视的,尤其是在学术界。混合算法往往是为了提高效率,减少小情况下递归的开销,正常递归是一种特殊情况。 |
| | | |
| ===Wrapper function=== | | ===Wrapper function=== |