【问题标题】:How do i multiply an integer with a function in scheme?如何将整数与方案中的函数相乘?
【发布时间】:2021-02-22 04:14:50
【问题描述】:

大家好,我正在尝试创建一个函数,它采用一个参数:n,然后返回在河内塔问题中将 n 个磁盘从 peg1 转移到 peg 3 所需的移动次数的值。 提示:n 个磁盘的总移动次数, H(n) = 2H(n-1)+1,如果 n>1 = 1,如果 n = 1。 我已经在 python 中实现了代码并且它工作正常但是当我在方案中实现它时我想出了一个错误的答案。我对计划很陌生,如果你们能帮我看看我在哪里搞砸了,我将不胜感激。我想出的代码如下:

(define(hanoi n)
      (if(< n 2)
          1
      (+(* 2 (hanoi(- n 1) 1)))))
(display(hanoi 4))

【问题讨论】:

  • 运行此函数时实际发生了什么?如果有错误消息:它是什么?现在查看代码(提示、缩进或让编辑器为您执行此操作可能会有所帮助)。
  • 嗨,它给了我一个错误的答案,即当我写 (display(hanoi 4)) 时它返回 8。但正确答案是 15。

标签: functional-programming scheme lisp towers-of-hanoi


【解决方案1】:

您将两个参数传递给hanoi,但它只需要一个,括号放错了位置。这就是Scheme中递归关系公式的样子——请注意你应该如何缩进和格式化你的代码!更好的是,让您的编辑器为您做好:

(define (hanoi n)
  (if (< n 2)
      1
      (+ (* 2 (hanoi (- n 1))) 1)))


(hanoi 4)
=> 15

顺便说一句:这个问题有一个封闭形式的解决方案,您不需要编写递归过程来查找移动次数 - 只需应用公式2**n - 1

(define (hanoi n)
  (- (expt 2 n) 1))

(hanoi 4)
=> 15

【讨论】:

  • 谢谢!我实际上正在使用一个不会自动缩进代码的在线解释器,但我会记住你的建议。
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2021-11-20
  • 2013-10-15
相关资源
最近更新 更多