Java Reference
In-Depth Information
deblank(p.substring(1))
We developed this call using our standard technique for developing function
calls; the only difference is that it is a call to the function being written —it is a
recursive call.
The final function is given in Fig. 15.2. And again, it consists of a base case
(the empty string), in which the answer is easy to calculate, and a recursive case.
The recursive case splits into two subcases; in each, the answer involves a recur-
sive call with a smaller part of the string as argument.
Because the body of the function is so simple, the two assertions could be
removed without harming readability. However, it is good to write such asser-
tions in all your recursive methods until you have fluency with recursion.
15.1.4
A function for a math definition
The notation n! is read as “ n factorial”. For n≥0 , n! is defined as the product of
the numbers in the range 1..n :
Activity
15-1.4
n!=1*2*3*... * n
By this definition, 0! is 1 because the product of 0 numbers is 1 . We can
write a recursive definition of n! by defining a base case and a recursive case:
See lesson
page 15.1 to
get the function
from the CD.
0! = 1
n!=n*(n-1)! ( for n>0)
It is easy to javanize this recursive definition of n! as a function. For the
base case, return 1 . For the recursive case, return n * (n - 1) , which can be done
with a recursive call, as shown in Fig. 15.3.
Many recursive math definitions can be easily javanized in this manner.
/** = p , with blank characters removed */
public static String deblank(String p) {
if (p.length() == 0)
{ return p; }
// { p has at least one character }
if (p.charAt(0) == ' ')
{ r eturn deblank(p.substring(1)); }
// { p 's first character is nonblank }
return p.charAt(0) + deblank(p.substring(1));
}
Figure 15.2:
Recursive function deblank
Search WWH ::




Custom Search