计划中的河内塔(递归) [英] Towers of Hanoi in Scheme (recursive)

查看:104
本文介绍了计划中的河内塔(递归)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我今天在scheme中编写了以下代码,但是评估是错误的.请不要告诉我我很喜欢编程,我知道这是一个经典的递归问题,但是我遇到了麻烦:

I wrote the following code in scheme today, but the evaluation is wrong. Please don't tell me I suck at programming, I understand that this is a classic recursion problem, but I am having trouble with it:

(define (towers-of-hanoi n source temp dest)
 (if (= n 1)
  (begin (display "Move the disk from ")
         (display source) 
         (display " to " )
         (display dest)
         (newline))
 (begin (towers-of-hanoi (- n 1) source temp dest)
        (display "Move the disk from ") 
        (display source)
        (display " to ")
        (display dest)
        (newline)
  (towers-of-hanoi(- n 1) temp source dest))))

我希望代码能正常工作,并且在调试它时,我会让自己更加困惑.谁能帮我吗?

I expected the code to work, and when I debug it I just confuse myself even more. Can anyone help me?

推荐答案

在您的代码中,最后一个递归调用似乎是错误的,并且该过程的参数顺序存在问题.尝试以下方法:

In your code, the last recursive call appears to be wrong, and there is a problem with the order of the procedure's parameters. Try this instead:

(define (towers-of-hanoi n source dest temp)
  (if (= n 1)
      (begin 
        (display "Move the disk from ")
        (display source) 
        (display " to " )
        (display dest)
        (newline))
      (begin 
        (towers-of-hanoi (- n 1) source temp dest)
        (display "Move the disk from ") 
        (display source)
        (display " to ")
        (display dest)
        (newline)
        (towers-of-hanoi (- n 1) temp dest source))))

我注意到您一直在问标记为racket的问题,这是针对Racket的同一代码的更惯用和简短的版本:

I noticed that you've been asking questions tagged as racket, here's a more idiomatic and shorter version of the same code, for Racket:

(define (towers-of-hanoi n source dest temp)
  (cond [(= n 1)
         (printf "Move the disk from ~a to ~a~n" source dest)]
        [else
         (towers-of-hanoi (sub1 n) source temp dest)
         (printf "Move the disk from ~a to ~a~n" source dest)
         (towers-of-hanoi (sub1 n) temp dest source)]))

无论哪种方式,它都能按预期工作:

Either way, it works as expected:

(towers-of-hanoi 3 "source" "dest" "temp")

Move the disk from source to dest
Move the disk from source to temp
Move the disk from dest to temp
Move the disk from source to dest
Move the disk from temp to source
Move the disk from temp to dest
Move the disk from source to dest

这篇关于计划中的河内塔(递归)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆