递归地编码近似序列。 DrRacket,方案
Coding an approximation sequence recursively. DrRacket, Scheme
最近问了一个问题,"How to find mistake in my sequence. DrRacket, Scheme",然后被不耐烦的提问者删除了。
由于我正在打最后几个字,所以把Q和A转在这里,以免浪费。
此处引用几乎一字不漏:
我正在尝试解决这个序列:
我是在do
循环中做的,停止表达式的条件是
但是我的 do
循环不起作用。我找不到错误。请帮我。我的代码:
(define (y a n x )
(if (= n 0)
a
(* 0.5 (+ (y a (- n 1) x) (/ x (y a (- n 1) x))))
)
)
(define (f a x e)
(do
( (n 0 (+ n 1)) )
( ( < (abs (- (sqr (y a n x)) (sqr (y a (- n 1) x)))) e) ("end of loop"))
(display (y a n x))
(newline)
)
)
缩进是你的朋友,而不是你的敌人:
(define (y a n x)
(if (= n 0)
a
(* 0.5 (+ (y a (- n 1) x)
(/ x (y a (- n 1) x)) )) ))
(define (f a x e)
(do ( (n 0 (+ n 1)) )
( (< (abs (- (sqr (y a n x))
(sqr (y a (- n 1) x)) ))
e)
("end of loop"))
(display (y a n x))
(newline)))
这段代码的方法很不寻常。让人想起Prolog中的迭代深化。你正试图通过逐渐增加的步骤来解决它。
换句话说,您单独计算序列的第 n 和第 (n-1) 个成员。但实际上,从后者到前者只需要一步。
这里是递归不是你朋友的情况。
核心递归,即迭代,是你的朋友。
而不是在每一步从 n 向下计数到 0,同时递增 n[ 的起始值=48=]每一步之前;
0
1 0
2 1 0
3 2 1 0
....
为什么不简单地从 0 开始计算 up,增量为 1:
0 1 2 3 ....
大胆前进直到条件成立?
但是我们关心解决方案需要多少步骤呢?我们不!我们根本不需要 n
。
更不用说 (- 0 1)
是您的函数 y
被 f
中的 do
循环强制处理的值,但尚未配备处理,导致无底递归。这只是您的代码中突然出现的一个问题;还有更多(字符串不是函数),但实际上,代码无论如何都需要大修。
最近问了一个问题,"How to find mistake in my sequence. DrRacket, Scheme",然后被不耐烦的提问者删除了。
由于我正在打最后几个字,所以把Q和A转在这里,以免浪费。
此处引用几乎一字不漏:
我正在尝试解决这个序列:
我是在do
循环中做的,停止表达式的条件是
但是我的 do
循环不起作用。我找不到错误。请帮我。我的代码:
(define (y a n x )
(if (= n 0)
a
(* 0.5 (+ (y a (- n 1) x) (/ x (y a (- n 1) x))))
)
)
(define (f a x e)
(do
( (n 0 (+ n 1)) )
( ( < (abs (- (sqr (y a n x)) (sqr (y a (- n 1) x)))) e) ("end of loop"))
(display (y a n x))
(newline)
)
)
缩进是你的朋友,而不是你的敌人:
(define (y a n x)
(if (= n 0)
a
(* 0.5 (+ (y a (- n 1) x)
(/ x (y a (- n 1) x)) )) ))
(define (f a x e)
(do ( (n 0 (+ n 1)) )
( (< (abs (- (sqr (y a n x))
(sqr (y a (- n 1) x)) ))
e)
("end of loop"))
(display (y a n x))
(newline)))
这段代码的方法很不寻常。让人想起Prolog中的迭代深化。你正试图通过逐渐增加的步骤来解决它。
换句话说,您单独计算序列的第 n 和第 (n-1) 个成员。但实际上,从后者到前者只需要一步。
这里是递归不是你朋友的情况。
核心递归,即迭代,是你的朋友。
而不是在每一步从 n 向下计数到 0,同时递增 n[ 的起始值=48=]每一步之前;
0
1 0
2 1 0
3 2 1 0
....
为什么不简单地从 0 开始计算 up,增量为 1:
0 1 2 3 ....
大胆前进直到条件成立?
但是我们关心解决方案需要多少步骤呢?我们不!我们根本不需要 n
。
更不用说 (- 0 1)
是您的函数 y
被 f
中的 do
循环强制处理的值,但尚未配备处理,导致无底递归。这只是您的代码中突然出现的一个问题;还有更多(字符串不是函数),但实际上,代码无论如何都需要大修。