递归函数最佳实践; 这些是什么?

Jef*_*eff 0 language-agnostic recursion functional-programming tail-recursion

除典型之外,还有哪些其他与语言无关的设计递归函数的方法:

if (counter < 1) 
    return output;
else
   callSelf(); 
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?每当查看示例时,我总会看到上面代码的一个版本.

谢谢!:)

dco*_*eau 6

这就是它.

递归函数设计就像"我可以返回一个值还是需要进一步处理?"一样简单.并且"Processing返回了一个值,在我传递之前我该怎么做?"

尾递归只是编译器/解释器可用于提高性能的优化方法.本质上,如果递归函数遵循严格格式(在递归调用之后没有任何反应,通常意味着递归调用总是与之配对return),可以优化递归函数并将其重写为for循环.


Dar*_*rio 5

你究竟是什么问题?只是尝试一些答案;-)

有许多类型的递归:

递归的应用程序列表非常丰富.在函数式编程中,任何迭代代码(for-loops等)都通过递归表示!

另一个好例子:

let rec sumTree = function
| End -> 0
| Node(val, right, left) = val + sumTree right + sumTree left
Run Code Online (Sandbox Code Playgroud)

递归的主要"最佳实践"是确保在某些时候满足您的终止条件,因此您通常会使用比初始调用中更小的数据自我调用函数(只是树的一部分) ).其他一切都可以导致无休止的递归.