Fed*_*ler 4 recursion scheme tail-recursion
我想知道你如何在计划中实现尾部恢复功能?
我有一个为方案定义的递归方法:
(define power-is-fun
(lambda (x y)
(cond [(= y 0)
1]
[(> y 0)
(* (power-is-fun x (- y 1)) x)])))
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚另一个应该是怎样的.
答案类似,您只需将累积结果作为参数传递:
(define power-is-fun
(lambda (x y acc)
(cond [(= y 0)
acc]
[(> y 0)
(power-is-fun x (- y 1) (* x acc))])))
Run Code Online (Sandbox Code Playgroud)
像这样调用它,注意accis 的初始值1(你可以为它构建一个辅助函数,所以你不必记得1每次传递):
(power-is-fun 2 3 1)
> 8
Run Code Online (Sandbox Code Playgroud)
一些将递归过程转换为尾递归的通用指针:
power-is-fun,而在尾递归版本中,调用power-is-fun是在退出过程之前发生的最后一件事| 归档时间: |
|
| 查看次数: |
4267 次 |
| 最近记录: |