Tom Kelliher, CS17

Apr. 29, 1996

Professor Levish enlightens us on the nature of the existential semicolon in the while and do/ while constructs.

We will discuss arrays and files on Friday.

We'll also have a surprise quiz on Friday.

Recursion

A recursive function:

Any function which calls itself, directly or indirectly, is called a recursive function.

What prevents a recursive function from infinitely recursing?

Requirements for recursion:

1. Decomposition into smaller problems of same type.
2. Recursive calls must diminish problem size.
3. Necessity of base case.
4. Base case must be reached.

Example: Printing Integers from 1 to n

```void print(int n)
{
if (n > 0)
{
print(n - 1);
cout << n;
}
}
```

Does it meet the requirements?

What happens if we swap the statements in the if block?

How does this work?

Example: Factorial

```int fact(int n)
{
assert (n >= 0);   // Use assert.h.

if (n < 2)
return 1;
else
return n * fact(n - 1);
}
```

Does it meet the requirements?

How does this work?

Integer Types

1. char.
2. short int or short.
3. int.
4. long int or long.
5. signed, unsigned.

Ranges, defaults for signed, unsigned?

Float Types

1. float
2. double
3. long double

Ranges, precisions? ((6, 38), (19, 4,932)).

Arithmetic Anomalies

• Division by zero.
• Integer division vs. float division.
• Arithmetic overflow.
• Arithmetic underflow.
• Representational errors.
• Cancellation errors.

Arithmetic Conversions

• Implicit (operator, assignment, return, some parameters), Explicit (casts).
• From smaller to larger --- ``safe.''
• From larger to smaller --- ``unsafe.''

Thomas P. Kelliher
Wed May 1 00:21:17 EDT 1996
Tom Kelliher