我正在使用SICP的书,我正在努力解决递归和迭代过程的概念。在问题1.17中,他们问:
练习1.17。本节中的指数算法是基于通过重复乘法进行指数运算的。以类似的方式,我们可以通过重复加法来执行整数乘法。现在,假设我们在加法的同时,将整数加倍,并将整数除以2的运算减半。利用这些步骤,设计一个类似于使用对数步骤数的快速扩展的乘法过程。b) (* (double a)
我在“使用F#进行函数式编程”(4.22.3)中找到了这个练习:
多项式被重新表示为整数列表。例如,多项式f(x) = x^3 +2由列表2;0;0;1表示。现在我需要一个函数,它接受两个整数列表并返回一个整数列表:
// polymul: int list -> int list -> int li
我的目标是编写一个类型为int list -> int的乘法函数,该函数接受ints的列表,并且,使用延续的返回一个int,使得int = int list中所有ints的乘法。以下是我到目前为止所拥有的: let rec times' l c = match l with | h::h2::t -> times'(h*h2::t) (fun r -> c<
使用递归算法递增自然数的伪代码如下(StevenS.Skiena的“算法设计手册”中的示例): if y = 0 then return(1) else
if (y mod我发现JavaScript用0.5或更高的整数舍入,所以如果y是奇数,它会增加两倍,即5 -> 7。我可以使用Math.floor(y/2)使其四舍五入,但是我假设这个函数应该可以工作,不管是向上还是向下。所以我的问题是,有没有一种方法可以在不使