通过字符串返回步骤来实现河内塔的有效方法

时间:2019-04-10 11:02:37

标签: go towers-of-hanoi

我正在比较JS,Rust和Go中的几种算法。我在Go中以这种方式实现了河内的Towsers:

positions

但是此实现比JS或Rust慢得多。因此,我认为这可以更快地完成。但是如何?

我已经尝试将func Hanoi() (hanoi func(n int, from, via, to string) string) { var moves strings.Builder var hanoiRe func(n int, from, via, to string) hanoiRe = func(n int, from, via, to string) { if n > 0 { hanoiRe(n-1, from, to, via) moves.WriteString(from) moves.WriteString("->") moves.WriteString(to) moves.WriteString("\n") hanoiRe(n-1, via, from, to) } } hanoi = func(n int, from, via, to string) string { hanoiRe(n, from, via, to) return moves.String() } return } type hanoi struct{moves strings.Builder}一起使用,这有点慢。使用字符串和func (h *hanoi) ...的方式要慢得多。

编辑:

我的比较:

JS:

moves += ...

铁锈:

class HanoiJS {
    constructor() {
        this.moves = "";
    }
    hanoi(n, from, via, to) {
        if (n > 0) {
            this.hanoi(n - 1, from, to, via);
            this.moves += from + "->" + to + "\n";
            this.hanoi(n - 1, via, from, to);
        }
        return this.moves;
    }
}

与n = 20和5次相比: chart

0 个答案:

没有答案