Function 方案函数-奇数和?
我正在研究一个类的racketin方案,问题是创建一个递归函数,它显示从1开始的n个奇数的和。这个程序一直在运行,我不明白为什么。任何帮助都将不胜感激。Function 方案函数-奇数和?,function,scheme,racket,Function,Scheme,Racket,我正在研究一个类的racketin方案,问题是创建一个递归函数,它显示从1开始的n个奇数的和。这个程序一直在运行,我不明白为什么。任何帮助都将不胜感激。 (即,如果我调用(奇数和2),我希望它计算1+3(前两个奇数)并显示4) 以下是从0到n(含)的数字总和示例: 让我们看看偶数求和的问题(然后你可以把它改为奇数求和) 我们需要一个计算第n个偶数的助手: (define (nth-even-number n) (* 2 n)) ; > (nth-even-number 0) ; 0
(即,如果我调用(奇数和2),我希望它计算1+3(前两个奇数)并显示4)
以下是从0到n(含)的数字总和示例: 让我们看看偶数求和的问题(然后你可以把它改为奇数求和) 我们需要一个计算第n个偶数的助手:
(define (nth-even-number n)
(* 2 n))
; > (nth-even-number 0)
; 0
; > (nth-even-number 1)
; 2
; > (nth-even-number 2)
; 4
现在对偶数求和很简单(与从零到求和相比)
有一个小错误,你把括号放错了地方:
(define (odd-sum-work n)
(if (= n 1)
1)
(+ n (odd-sum-work (- n 2))))
应该是
(define (odd-sum-work n)
(if (= n 1)
1
(+ n (odd-sum-work (- n 2)))))
在DrRacket中重新标识代码时,它会显示
(define (odd-sum-work n)
(if (= n 1)
1)
(+ n (odd-sum-work (- n 2))))
更明显的是,条件没有“else”分支-如果n
为1,则对1
进行求值,但将其丢弃,求值将以一个永远不会终止的递归继续
(“Reindent”在“Racket”菜单中。它让我免于很多悲伤。)也许你应该加一个检查,以确保
n
是奇怪的。或者在条件中使用小于或等于。@在我看来,Rptx参数验证实际上不属于帮助函数。更好的办法是在本地将其定义为“public”函数。但是你的回答中没有包含“公共”功能。也许只是一张纸条。OP可能会修复括号,然后仍然会得到无限循环。也许只是加个便条?
(define (odd-sum-work n)
(if (= n 1)
1)
(+ n (odd-sum-work (- n 2))))
(define (odd-sum-work n)
(if (= n 1)
1
(+ n (odd-sum-work (- n 2)))))
(define (odd-sum-work n)
(if (= n 1)
1)
(+ n (odd-sum-work (- n 2))))