6.7 One More Example
67
6.6
LEAP OF FAITH
Following the flow of execution is one way to read programs, but it can quickly
become labyrinthine. An alternative is what I call the “leap of faith.” When you
come to a function call, instead of following the flow of execution, you
assume that
the function works correctly and returns the right result.
In fact, you are already practicing this leap of faith when you use built-in functions.
When you call math.cos or math.exp, you don’t examine the bodies of those func-
tions. You just assume that they work because the people who wrote the built-in
functions were good programmers.
The same is true when you call one of your own functions. For example, in Section 6.4,
we wrote a function called is_divisible that determines whether one number is
divisible by another. Once we have convinced ourselves that this function is correct –
by examining the code and testing – we can use the function without looking at the
body again.
The same is true of recursive programs. When you get to the recursive call, instead
of following the flow of execution, you should assume that the recursive call works
(yields the correct result) and then ask yourself, “Assuming that I can find the fac-
torial of
n
− 1, can I compute the factorial of
n?” In this case, it is clear that you can,
by multiplying by
n.
Of course, it’s a bit strange to assume that the function works correctly when you
haven’t finished writing it, but that’s why it’s called a leap of faith!
6.7
ONE MORE EXAMPLE
After factorial, the most common example of a recursively defined mathematical
function is fibonacci, which has the following definition:
∗
fibonacci
Chia sẻ với bạn bè của bạn: