我的目标是编写一种方法,该方法通过给定х和 n 来计算总和:
S = 1 + x / 1! + x2 / 2! + ... + xn / n!
我的代码:
#lang racket
(define (func n)
(define (n1! f)
(if (= f 0) 1
(* f (n1! (- f 1)))))
(define (iter i res)
(if (= i n) (+ 1 res)
(iter (+ i 1) (/ i (n1! i))))))
(func 3)
有我不明白的错误。它说:
begin (possibly implicit): no expression after a sequence of internal definitions in:
(begin (define (n1! f) (if (= f 0) 1 (* f (n1! (- f 1))))) (define (iter i res) (if (= i n) (+ 1 res) (iter (+ i 1) (/ i (n1! i))))))
(define (n1! f) (if (= f 0) 1 (* f (n1! (- f 1)))))
(define (iter i res) (if (= i n) (+ 1 res) (iter (+ i 1) (/ i (n1! i)))))
我做错了什么?
答案 0 :(得分:4)
您需要在两个定义之后添加一个表达式,以便func实际上可以执行某些操作。当前,您的代码等效于(define (func n))
。
您的代码是这个
(define (func n)
(define (n1! f)
(if (= f 0) 1
(* f (n1! (- f 1)))))
(define (iter i res)
(if (= i n) (+ 1 res)
(iter (+ i 1) (/ i (n1! i))))))
您需要这样做
(define (func n)
(define (n1! f)
(if (= f 0) 1
(* f (n1! (- f 1)))))
(define (iter i res)
(if (= i n) (+ 1 res)
(iter (+ i 1) (/ i (n1! i)))))
(iter n 0))