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,这部分很清楚。呃,需要更好地校对我的问题。谢谢。我能够根据您的描述想出一种工作方法,并在下一个练习中创建指数函数。