我无法使用对数字进行平方的递归函数。 基本上我正在尝试编写一个函数,一直调用Add函数x次数来平方。所以如果它是7则应该调用它七次以获得49.
(define (Add a b)
(if (and (number? a) (number? b))
(+ a b)
(lambda (x)
(+ (a x) (b x)))))
(define i 0)
(define ans 0)
(define (Square a)
(when (> i a)
((Add a ans) (+ i 1 ))))
我遇到的主要问题是square函数只经过一次循环,我不知道为什么条件不会更新/继续循环直到达到那个条件。
答案 0 :(得分:1)
直接写square
是一件很痛苦的事。编写递归multiply
函数然后只需要使用方函数调用multiply
就容易多了。按照设计方法对自然数进行递归,如9.3 of HtDP部分所示。
顺便说一句,如果你还没有在更标准的自引用数据定义(例如列表)上编写一堆递归函数,那么,我声称你的导师做错了。
答案 1 :(得分:0)
您应该制作更改参数的所有内容。想象一下,你想让(define (factorial value)
(define (helper cur ans)
(if (zero? cur)
ans ; finished. return the answer
(helper (- cur 1) ; recur by updating n
(* cur ans)))) ; and update the answer
(helper value 1))
然后两个值发生变化。它的结果和数字的迭代下降到零。
scan f_s("%d", &list[1]);
list[1] + 3;
再次。它的完全与评论中的示例相同,只是它在每一步都做了其他事情。基本构建块是相同的,并且可以使参数平方的东西非常相似。