【发布时间】:2019-03-09 05:01:27
【问题描述】:
我有一个任务要创建一个尾递归函数,该函数需要 3 个整数(可能非常大)p q 和 r,并计算除法的模数 (p^q)/r。我想出了如何做一个实现目标的函数,但它不是尾递归的。
(define (mod-exp p q r)
(if (= 0 p)
0
(if (= 0 q)
1
(if (= 0 (remainder r 2))
(remainder (* (mod-exp p (quotient q 2) r)
(mod-exp p (quotient q 2) r))
r)
(remainder (* (remainder p r)
(remainder (mod-exp p (- q 1) r) r))
r)))))
我很难把我的头包起来做这个尾递归,我不知道如何“累积”剩余部分。 对于这项任务,我几乎只能使用基本的数学运算符以及商和余数。
【问题讨论】:
-
从尾递归“正则”幂运算开始,然后酌情添加
remainder。 (您需要添加一个累积参数。)
标签: recursion scheme modulo tail-recursion modular-arithmetic