两个有意思的递归小程序




面试


最近听到的两道面试、笔试题,感觉挺有意思的:
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'。


当然这两个函数这样写效率不一定高,但采用递归的方法确实挺有意思的。