兩個有意思的遞歸小程序

最近聽到的兩道面試、筆試題,感覺挺有意思的:
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. int strlens(const char *src)
  12. {
  13.     if(*src != '/0')
  14.         return strlens(++src)+1;
  15.     else
  16.         return 0;
  17. }
strrev這個函數,本來要求兩個參數都是char *類型的,但我沒想到解決辦法,倒是用char **可以,不過這樣把目的串實參的指針值給改變了,另外最後還得加個'/0'。
當然這兩個函數這樣寫效率不一定高,但採用遞歸的方法確實挺有意思的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章