Recursion Simple Examples int sum int n These

  • Slides: 5
Download presentation
Recursion: Simple Example(s) int sum( int n ) /* These examples from Kelley/Pohl */

Recursion: Simple Example(s) int sum( int n ) /* These examples from Kelley/Pohl */ { if( n <= 1 ) return n; else return( n + sum( n – 1 )); } int factorial( int n ) /* Whoopsie-daisies */ { return( n * factorial( n – 1 )); } int factorial( int n ) { if( n <= 1 ) return n; else return( n * factorial( n – 1 )); }

Recursion: Examples w/ Strings (from Kelley/Pohl) int r_strlen( char *s ) { if( *s

Recursion: Examples w/ Strings (from Kelley/Pohl) int r_strlen( char *s ) { if( *s == 0 ) return 0; else return( 1 + r_strlen( s + 1 )); } /* r_strncmp considers only the first n characters */ int r_strncmp( char *s 1, char *s 2, int n ) { if(( *s 1 != *s 2 ) || ( *s 1 == 0 ) || ( n == 1 )) return( *s 1 - *s 2 ); else return( r_strncmp( s 1 + 1, s 2 + 1, n – 1 )); }

Recursion: 8 Queens void place_queen( int board[8], int row ) { int col, i,

Recursion: 8 Queens void place_queen( int board[8], int row ) { int col, i, good; if( row == 8 ) { print_board( board ); return; } for( col = 0; col < 8; col++ ) { /* check to see if board[row] = col; OK */ good = 1; for( i = 0; i < row; i++ ) { if( ( col == board[i] ) || ( abs( row - i ) == abs( col - board[i] ))) good = 0; } if( good ) { board[row] = col; place_queen( board, row + 1 ); } } }

Recursion: Mergesort void mergesort( int *a, int index, int len ) { int half;

Recursion: Mergesort void mergesort( int *a, int index, int len ) { int half; if( len <= 1 ) return; else { half = len / 2; mergesort( a, index, half ); mergesort( a, index + half, len - half ); merge( a, index, half, index + half, len - half ); } }

Recursion: Mergesort (Merge) void merge( int *a, int index 1, int len 1, int

Recursion: Mergesort (Merge) void merge( int *a, int index 1, int len 1, int index 2, int len 2 ) { int b[MAX_SIZE], b_index = 0, a_index = index 1; int i, total = len 1 + len 2; for( i = 0; i < total; i++ ) { if(( len 1 > 0 && len 2 > 0 && a[index 1] < a[index 2] ) || ( len 1 > 0 && len 2 == 0 )) { b[b_index] = a[index 1]; b_index++; index 1++; len 1 --; } else { b[b_index] = a[index 2]; b_index++; index 2++; len 2 --; } } for( i = 0; i < total; i++ ) { a[a_index + i] = b[i]; } }