乘法重复加法?

时间:2016-12-29 18:28:27

标签: scheme multiplication addition

我是Scheme的新手。我试图编写一个程序,将(整数)乘法定义为重复加法。在python中,程序看起来像:

a = int(raw_input(['please enter a number to be multiplied']))
b = int(raw_input(['please enter a number to multiply by']))

y = a
print y
for i in range(b-1):
    y+=a
print y

尝试使用Scheme时有两个问题,一个是“硬”,一个是“软”:

  1. '硬'问题:我在Scheme中找不到等效的范围函数。我该如何实现呢?
  2. '软'问题:在本书的这一点上,尚未为Scheme引入for循环,这使我相信解决方案不包含for循环;但是,如果更容易/更好,我可以使用for循环。

2 个答案:

答案 0 :(得分:0)

使用递归代替迭代。一般的想法是:

mult(a, b)
    if b == 0, return 0
    return a + mult(a, b-1)

现在,您可以自己在Scheme中编写代码吗?

答案 1 :(得分:0)

在Racket(一个Scheme衍生物)中,有一个“命名为let”,可以在每个循环中继续添加b次(更容易理解这个概念):

(let loop ((n 0)
           (s 0))
  (cond
    ([= n b]  s)
    (else (loop (add1 n) (+ s a)))))