1、将一整数逆序后放入一数组中(要求递归实现) void convert(int *result, int n) { }
int main(int argc, char* argv[]) { }
2、求高于平均分的学生学号及成绩(学号和成绩人工输入) double find(int total, int n) {
int number, score, average; scanf(\if(number != 0) {
scanf(\
average = find(total+score, n+1); if(score >= average)
printf(\
int n = 123456789, result[20]={}; convert(result, n); printf(\for(int i=0; i<9; i++)
printf(\
if(n>=10)
convert(result+1, n/10);
*result = n;
}
return average;
} else { }
printf(\return total/n;
int main(int argc, char* argv[]) { }
3、递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
int find(char *str, int n) { n-2); }
int main(int argc, char* argv[]) {
char *str = \
printf(\else
return 0;
if(n<=1)
return 1;
return find(str+1,
find(0, 0);
else if(str[0]==str[n-1])
\
}
4、组合问题(从M个不同字符中任取N个字符的所有组合) void find(char *source, char *result, int n) { }
int main(int argc, char* argv[]) {
int const n = 3;
char *source = \if(n>0 && strlen(source)>0 && n<=strlen(source))
find(source, result, 3);
if(n==1) {
while(*source)
printf(\
} else { }
int i, j;
for(i=0; source[i] != 0; i++); for(j=0; result[j] != 0; j++); for(; i>=n; i--) { }
result[j] = *source++; result[j+1] = '\\0'; find(source, result, n-1);
}
5、分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
void prim(int m, int n) { if(m>n) { while(m%n != 0) n++; m /= n; prim(m, n); printf(\
}
}
int main(int argc, char* argv[]) { int n = 435234; printf(\ prim(n, 2); }
6、寻找迷宫的一条出路,o:通路; X:障碍。(大家经常谈到的一个小算法题) #define MAX_SIZE 8 int H[4] = {0, 1, 0, -1};
int V[4] = {-1, 0, 1, 0};
char Maze[MAX_SIZE][MAX_SIZE] = {{'X','X','X','X','X','X','X','X'}, {'o','o','o','o','o','X','X','X'}, {'X','o','X','X','o','o','o','X'},
{'X','o','X','X','o','X','X','o'},
{'X','o','X','X','X','X','X','X'},
{'X','o','X','X','o','o','o','X'},
{'X','o','o','o','o','X','o','o'},
{'X','X','X','X','X','X','X','X'}}; void FindPath(int X, int Y) {
if(X == MAX_SIZE || Y == MAX_SIZE) { for(int i = 0; i < MAX_SIZE; i++) for(int j = 0; j < MAX_SIZE; j++)
printf(\MAX_SIZE-1 ? ' ' : '\\n');
}else for(int k = 0; k < 4; k++)