我正在尝试创建一个程序,该程序可以找到nxn板上最短路径的数量。这应该使用二叉树递归。它需要两个数字来表示板上某个正方形的位置,并返回指示的正方形和左上角之间的不同最短路径的数量。而且你只能向上,向下,向左或向右移动。
0 1 2 3 4 5 6 7 8
0 . . . . . . . . .
1 . . . . . . . . .
2 . . . . . . . . .
3 . . . . . . . . .
4 . . . . . . x . .
5 . . . . . . . . .
6 . . . . . . . . .
在这种情况下,x位于第4行第6行。程序应计算最短路径的数量。显然,如果x在边缘上,则只有一条最短路径。
(check-expect (shortest 0 0) 0)
(check-expect (shortest 0 1) 1)
(check-expect (shortest 1 0) 1)
(check-expect (shortest 1 1) 2)
(check-expect (shortest 1 2) 3)
(check-expect (shortest 2 1) 3)
(check-expect (shortest 2 2) 6)
(check-expect (shortest 2 3) 10)
(check-expect (shortest 2 7) 36)
(check-expect (shortest 6 5) 462)
我相信我非常接近,但在其他情况下我遇到了问题:
(define (shortest x y)
(cond
[(= x y 0) 0]
[(or (zero? y) (zero? x)) 1]
[else (+ 1 (shortest (sub1 x) y)
(shortest x (sub1 y)))]))
我以为在其他地方会有一个if语句,但我不确定要测试什么。
这不应该有任何帮助者,lambda,本地人等等。在ISL +中。任何帮助都会很棒。
答案 0 :(得分:0)
据我所知,你是否改变了
的第4行 [else (+ 1 (shortest (sub1 x) y)
到
[else (+ (shortest (sub1 x) y)
该功能应该按要求工作。所以......
(define (shortest x y)
(cond
[(= x y 0) 0]
[(or (zero? y) (zero? x)) 1]
[else (+ (shortest (sub1 x) y)
(shortest x (sub1 y)))]))
并且不需要ifs中的ifs。