斐波那契数列
使用递归定义的最常见数学函数是 fibonacci (斐波那契数列),见其 定义
fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(n) = fibonacci(n − 1) + fibonacci(n − 2)
Python代码:
def fibonacci (n) :
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
fibonacci(5)
调试
将一个大程序分解为较小的函数为调试生成了自然的检查点。如果一个函数不如预期
的运行,有三个可能性需要考虑:
• 该函数获得的实参有些问题,违反先决条件。
• 该函数有些问题,违反后置条件。
• 返回值或者它的使用方法有问题。
PS:
前置条件( precondition):用例在调用某个方法时必须满足的条件。
后置条件(postcondition):实现在方法返回时必须达到的要求。
副作用(side effects):方法可能对对象产生的任何其他变更。
代码:
def factorial (n):
space = '␣' * (4 * n )
print ( space , 'factorial ', n )
if n == 0:
print ( space , 'returning ␣1')
return 1
else:
recurse = factorial (n-1)
result = n * recurse
print ( space , 'returning ', result )
return result
factorial(5)
效果:
space 是一个空格字符的字符串,用来控制输出的缩进。下面是 factorial(4) 的输出结果:
C:\Users\xxx\Desktop>f.py
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ factorial 5
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ factorial 4
␣␣␣␣␣␣␣␣␣␣␣␣ factorial 3
␣␣␣␣␣␣␣␣ factorial 2
␣␣␣␣ factorial 1
factorial 0
returning ␣1
␣␣␣␣ returning 1
␣␣␣␣␣␣␣␣ returning 2
␣␣␣␣␣␣␣␣␣␣␣␣ returning 6
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ returning 24
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ returning 120