一个reddit线程提出了一个显然有趣的问题:
尾递归函数可以简单地转换为迭代函数.其他的,可以通过使用显式堆栈进行转换.可每次递归转化为迭代?
帖子中的(计数器?)示例是对:
(define (num-ways x y)
(case ((= x 0) 1)
((= y 0) 1)
(num-ways2 x y) ))
(define (num-ways2 x y)
(+ (num-ways (- x 1) y)
(num-ways x (- y 1))
Run Code Online (Sandbox Code Playgroud) 我理解Dijkstra的算法是什么,但我不明白为什么它的工作原理.
当选择下一个要检查的顶点时,为什么Dijkstra算法会选择权重最小的顶点?为什么不随意选择一个顶点,因为算法无论如何都会访问所有顶点?