# Lecture #6: Recursion

Handouts: Factorial
1. Greetings and felicitations
2. What is recursion?
1. math: think induction
2. factorial: n! = n * (n-1)!, 0! = 1
3. Program stack
1. where arguments, locals, return addresses, state variables go
2. walk through 3! to show how to use it
4. Equivalent to iteration
1. show factorial; equivalence can be proven mathematically
1. if you can change probem to a simpler case, you got it
2. need a terminal case
6. String length
1. break it down
2. show solution

# Factorial

This prompts you for an integer and prints the factorial. It does not check for overflow!
```/*
* program to compute a factorial
* invocation:
*	fact		run it
* exit code: 0 always
* author: Matt Bishop, bishop@cs.ucdavis.edu, 9/16/96
*/
#include <stdio.h>
#include <stdlib.h>

/*
* compute a single-precision factorial
*/
int fact(int n)
{
if (n < 0)	return(-1);	/* sanity check */
if (n == 0)	return(1);	/* terminal case */
return(n * fact(n-1));	/* recurse */
}

/*
* the main program
*/
int main(void)
{
int n;			/* number to compute factorial of */

/*
* read numbers and compute their factorial
*/
while(printf("> "), (nread = scanf("%d", &n)) != EOF){
case 0:		/* bad input */
printf("Need a non-negative integer\n");
break;
case 1:		/* good input */
printf("\t%d\n", fact(n));
break;
default:	/* can't happen (uh huh ...) */
break;
}
}

/*
*/
putchar('\n');
return(EXIT_SUCCESS);
}
```

You can also see this document as a RTF document, a Postscript document, or a plain ASCII text document.
Send email to cs40@csif.cs.ucdavis.edu.

Department of Computer Science
University of California at Davis
Davis, CA 95616-8562