gpt4 book ai didi

recursion - 为什么这个递归加法在Scheme中是错误的呢?

转载 作者:行者123 更新时间:2023-12-03 08:02:15 25 4
gpt4 key购买 nike

#lang eopl

(define (vectorSum V b e) ; b is starting index, and e is ending index
(cond
[ (eqv? b e) vector-ref V b]
[ (> b e)
(eopl:error 'vectorSum "starting index must be smaller than or equal to the end index")]
[ else (+ (vector-ref V b) (vectorSum V (+ b 1) e))]))


(define A #(1 1 1 1 1))

当我尝试这个时,我得到了错误的结果。这里有什么问题?

> (vectorSum A 0 4)
8
> (vectorSum A 0 1)
2
> (vectorSum A 0 3)
6
> (vectorSum A 1 3)
5
> (vectorSum A 1 2)
3

> (vectorSum A 0 1)
2
> (vectorSum A 1 2)
3

就拿(vectorSum A 0 3)来说,当我展开递归的时候,我以为应该是

+ 1 + VectorSum (1 3)
+ 1 + VectorSum (2, 3)
+ 1 + VectorSum (3, 3)
+ 1 (I hit the first case, there is no more recursion)
= 4

相反,我得到 6。为什么?

谢谢。


看看 0,1 和 1,2,答案不相等。

最佳答案

您对递归如何展开的理解是正确的。您的问题是您忘记在第一种情况下将对 vector-ref 的调用括起来。你写它的方式 vector-ref V b 被解释为三个独立的表达式。其中最后一个 (b) 是表达式的值。因此,由于在您的示例中 b 为 3,您将得到 1 + 1 + 1 + 3 = 6

只需添加括号使其成为一个函数调用,它就会像您希望的那样工作。

关于recursion - 为什么这个递归加法在Scheme中是错误的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com