我正在尝试学习一些函数式编程,并在scheme(racket)中解决project euler问题以帮助我入门。目前我正在处理问题15,并且我认为我有一个正确的计算网格中路径数量的函数。但问题是对于大规模的网格大小,该函数运行时间非常长。
(define uniqueTraverse
(lambda (x y gridSize)
(cond
((and (eq? x gridSize) (eq? y gridSize)) 1)
((eq? x gridSize) (uniqueTraverse x (+ y 1) gridSize))
((eq? y gridSize) (uniqueTraverse (+ x 1) y gridSize))
(else (+ (uniqueTraverse (+ x 1) y gridSize)
(uniqueTraverse x (+ y 1) gridSize))))))
我正在尝试弄清楚如何使这个函数成为尾递归,但我不知道该怎么做。我需要一些帮助来开始思考如何使用尾调用优化来优化这样的函数。
1
的行,然后可以迭代 n 次,在原地更新。 - Will Ness