几个递归练习
1.反向输出字符串
2.输出数组
3.查找数组中的最小值
4.选择排序
选择排序:从数组中查找最小的值,将其同数组中的第一个元素交换,然后从第二个元素开始查找最小的值同数组第二个元素交换,这样重复一直到只剩最后一个元素为止。
1
void stringReverse( char array[] )
2
{
3
if ( array[0] == '\0' )
4
return;
5
stringReverse( array + 1 );
6
printf( "%c", array[0] );
7
}
void stringReverse( char array[] )2
{3
if ( array[0] == '\0' )4
return;5
stringReverse( array + 1 );6
printf( "%c", array[0] );7
}2.输出数组
1
void printArray( int array[], int size )
2
{
3
if( size == 0 )
4
return;
5
printf( "%d ", array[0] );
6
printArray( ++array, --size );
7
}
void printArray( int array[], int size )2
{3
if( size == 0 )4
return;5
printf( "%d ", array[0] );6
printArray( ++array, --size );7
}3.查找数组中的最小值
1
int recursiveMinimum( int array[], int size )
2
{
3
if ( size == 1 )
4
return array[0];
5
6
if ( array[ size - 1 ] < recursiveMinimum( array, size-1 ) )
7
return array[ size - 1 ];
8
else
9
return recursiveMinimum( array, size-1 );
10
}
int recursiveMinimum( int array[], int size )2
{3
if ( size == 1 )4
return array[0];5

6
if ( array[ size - 1 ] < recursiveMinimum( array, size-1 ) )7
return array[ size - 1 ];8
else9
return recursiveMinimum( array, size-1 );10
}4.选择排序
选择排序:从数组中查找最小的值,将其同数组中的第一个元素交换,然后从第二个元素开始查找最小的值同数组第二个元素交换,这样重复一直到只剩最后一个元素为止。
1
void selectionSort( int list[], int n, int start)
2
{
3
{
4
int i;
5
int p = start;
6
if ( start < n - 1 )
7
{
8
for ( i = start; i < n; i++ )
9
{
10
if ( list[i] < list[p] )
11
p = i;
12
}
13
i = list[ p ];
14
list [ p ] = list[ start ];
15
list[ start ] = i;
16
selectionSort( list , n , start+1 );
17
}
18
}
19
}
5.线性查找
void selectionSort( int list[], int n, int start)2
{3
{ 4
int i; 5
int p = start; 6
if ( start < n - 1 ) 7
{ 8
for ( i = start; i < n; i++ ) 9
{10
if ( list[i] < list[p] ) 11
p = i; 12
}13
i = list[ p ]; 14
list [ p ] = list[ start ]; 15
list[ start ] = i; 16
selectionSort( list , n , start+1 ); 17
} 18
} 19
} 1
int linerSearch(int a[], int key, int size)
2
{
3
if ( size > 0 )
4
{
5
if ( a[ size - 1 ] == key )
6
return size - 1; //反方向,返回下标
7
return linerSearch( a, key, size - 1 );
8
}
9
10
return -1; //未找到
11
}
int linerSearch(int a[], int key, int size)2
{ 3
if ( size > 0 ) 4
{ 5
if ( a[ size - 1 ] == key )6
return size - 1; //反方向,返回下标 7
return linerSearch( a, key, size - 1 ); 8
} 9
10
return -1; //未找到 11
}


浙公网安备 33010602011771号