乘以无+或*

Kai*_*oze 5 lisp recursion scheme racket

我正在努力完成如何自己设计程序.我还没有完全掌握复杂的线性递归,所以我需要一些帮助.

问题:定义multiply,消耗两个自然数,n并且在不使用Scheme的情况下x生成.也可以从这个定义中消除.n * x*+

用+符号直截了当:

(define (multiply n m)
  (cond
    [(zero? m) 0]
    [else (+ n (multiply n (sub1 m)))]))

(= (multiply 3 3) 9)
Run Code Online (Sandbox Code Playgroud)

我知道要使用add1,但我不能正确递归.

谢谢.

Ósc*_*pez 6

将问题分成两个功能.首先,您需要一个(add m n)将m添加到n 的函数.什么是基本情况?当n为零时,返回m.什么是递归步骤?在add再次调用的结果中加一,但递减n.你猜对了,add1并且sub1会很有用.

另一个功能,(mul m n)是类似的.什么是基本情况?如果m或n为零,则返回0.递归步骤是什么?将(使用先前定义的函数)m添加到mul再次调用的结果中,但递减n.就是这样!


pax*_*blo 5

由于这几乎肯定是作业类型的问题,仅提示.

你如何添加7和2?虽然大多数人只想出9,但还有更基本的方法吗?

如何增加第一个数字并递减第二个数字直到其中一个达到零?

然后另一个是答案.我们来试试这个样本:

7 2
8 1
9 0 <- bingo
Run Code Online (Sandbox Code Playgroud)

这对于自然数字可以正常工作,但如果您想要将它应用于底片,则需要小心.您可以进入两个数字都从零开始的情况(例如with 10-2).当然,您可以事先检查并交换操作.

所以现在你知道可以用+递增和递减指令来写.这对于递归来说并不是很棒,但是,由于你的递归递增已经遇到了同样的问题,所以它可能是可以接受的.

现在你只需要在不使用的情况下找出如何在LISP中递增和递减+.我想知道是否可能有一些具体的指示:-)