为什么在Scheme和Python中实现的递归方程的返回值不同?

时间:2017-10-07 14:44:26

标签: python recursion lisp

我正在尝试在Scheme中实现一个基本的递归函数,并且我编写了相同的函数以确保我正确地编写它。 Scheme和Python实现为1到7的值返回相同的答案。但是,值开始分散。我无法理解为什么会这样。 (这是用于作业,但这不是作业中要求的问题,我只是想理解为什么2个实现返回不同的值)

# Function to be implemented 
f(n) = n, if n<4
f(n) = f(n-1) + 2f(n-2) + 3f(n-3) + 4f(n-4), otherwise

方案

(define (f n)
  (if (< n 4)
      n
      (+ (f (- n 1)) (* 2(f(- n 2))) (* 3(f (- n 3))) (* 4(- n 4)))))

(f 1)
(f 2)
(f 3)
(f 4)
(f 5)
(f 6)
(f 7)
(f 8)
(f 9)
(f 10)

1
2
3
10
26
63
157
377
900
2149

的Python

def f(n):
    if n<4:
        return n
    else: 
        return f(n-1) + 2*f(n-2) + 3*f(n-3) + 4*f(n-4)


print (f(1))
print (f(2))
print (f(3))
print (f(4))
print (f(5))
print (f(6))
print (f(7))
print (f(8))
print (f(9))
print (f(10))

1
2
3
10
26
63
157
401
1008
2533

1 个答案:

答案 0 :(得分:2)

在您的计划程序中,您写道:

(* 4(- n 4))

但它应该是这样的:

(* 4(f (- n 4)))