两个有意思的递归小程序
面试
最近听到的两道面试、笔试题,感觉挺有意思的:
1。实现库函数strlen,不能使用任何库函数,不能定义任何变量。
2。实现函数strrev,该函数有两个参数,将其中一个字符串逆序放到另一个字符串指针中,同样要求不能使用任何库函数,不能定义任何变量。
采用递归实现,刚好可以满足这两道题的要求:
1. void strrev(char **dest, const char *src)
2. {
3. if(*src == '/0')
4. return;
5. else
6. {
7. strrev(dest, src+1);
8. *(*dest)++ = *src;
9. }
10. }
11.
12. int strlens(const char *src)
13. {
14. if(*src != '/0')
15. return strlens(++src)+1;
16. else
17. return 0;
18. }
strrev这个函数,本来要求两个参数都是char *类型的,但我没想到解决办法,倒是用char **可以,不过这样把目的串实参的指针值给改变了,另外最后还得加个'/0'。
当然这两个函数这样写效率不一定高,但采用递归的方法确实挺有意思的。
最近听到的两道面试、笔试题,感觉挺有意思的:
1。实现库函数strlen,不能使用任何库函数,不能定义任何变量。
2。实现函数strrev,该函数有两个参数,将其中一个字符串逆序放到另一个字符串指针中,同样要求不能使用任何库函数,不能定义任何变量。
采用递归实现,刚好可以满足这两道题的要求:
1. void strrev(char **dest, const char *src)
2. {
3. if(*src == '/0')
4. return;
5. else
6. {
7. strrev(dest, src+1);
8. *(*dest)++ = *src;
9. }
10. }
11.
12. int strlens(const char *src)
13. {
14. if(*src != '/0')
15. return strlens(++src)+1;
16. else
17. return 0;
18. }
strrev这个函数,本来要求两个参数都是char *类型的,但我没想到解决办法,倒是用char **可以,不过这样把目的串实参的指针值给改变了,另外最后还得加个'/0'。
当然这两个函数这样写效率不一定高,但采用递归的方法确实挺有意思的。