Recursion 不带+的乘法;或*
我一个人在努力。我还没有完全掌握复杂的线性递归,所以我需要一些帮助 问题是: 定义Recursion 不带+的乘法;或*,recursion,lisp,scheme,racket,Recursion,Lisp,Scheme,Racket,我一个人在努力。我还没有完全掌握复杂的线性递归,所以我需要一些帮助 问题是: 定义乘法,它使用两个自然数n和x,并生成n*x,而不使用方案的*。也从这个定义中删除+ 用+号简单明了: (define (multiply n m) (cond [(zero? m) 0] [else (+ n (multiply n (sub1 m)))])) (= (multiply 3 3) 9) 我知道使用add1,但我不能正确使用递归 谢谢 因为这几乎肯定是一个家庭作业类型的问题,所
乘法
,它使用两个自然数n
和x
,并生成n*x
,而不使用方案的*
。也从这个定义中删除+
用+号简单明了:
(define (multiply n m)
(cond
[(zero? m) 0]
[else (+ n (multiply n (sub1 m)))]))
(= (multiply 3 3) 9)
我知道使用add1
,但我不能正确使用递归
谢谢 因为这几乎肯定是一个家庭作业类型的问题,所以只需提示即可 如何添加7和2?虽然大多数人只想到了9,但还有更基本的方法吗 你增加第一个数字,减少第二个数字,直到其中一个达到零,怎么样 那么另一个就是答案。让我们试试这个示例:
7 2
8 1
9 0 <- bingo
72
8 1
9 0将问题分为两个函数。首先,您需要一个函数(addmn)
,它将m添加到n中。基本情况是什么?当n为零时,返回m。什么是递归步骤?再次调用add
的结果中添加一个,但递减n。您猜对了,add1
和sub1
会很有用
另一个函数,(mul m n)
与此类似。基本情况是什么?如果m或n为零,则返回0。什么是递归步骤?再次调用mul
的结果中添加(使用先前定义的函数)m,但递减n。就这样 谢谢你的提示。我真的在自己的时间里完成这本书。唉,这就像多年前的c指针一样。我没有得到它,一周后仍然没有得到它,然后突然我得到了它。我知道使用add1和sub1,这部分很清楚。呃,需要更好地校对我的问题。谢谢。我能够根据您的描述想出一种工作方法,并在下一个练习中创建指数函数。