浅谈递归之蛋疼

最近太闲,把递归的东西整理一下。

先从最简单的字符串处理函数来看看递归函数,只追求思想,不求代码质量,虽然这些东西用递归写很蛋疼,

eg1.int strLen(char* str);

求字符串长度,代码如下,装逼专用

int strLen(char* str){

  return (*str == '\0')?0:(1 + strLen(++str));
}

eg2.void strCp(char* src, char* dest);

字符串复制

void strCp(char* src, char* dest){
  if(*src == '\0'){
    *dest = *src;
    return;
  }else{
    *dest = *src;
    dest++;
    src++;
    strCp(src, dest);
  }
}

eg3.bool strStr(char* str1, char* str2);

检查str2是否为str1的子串,这个也真够蛋疼的,哈哈

bool strStr(char* str1, char* str2){
  if(*str2 == '\0')
    return true;
  if(*str1 == '\0'){
    return false;
  }else{
    if(*str1 == *str2){
      char* p1 = str1 + 1;
      char* p2 = str2 + 1;
      return strStr(p1, p2);
    }else{
      str1++;
      return strStr(str1, str2);
    }
  }
}

好像没有其他的字符串处理函数了,想起来再补充。

补充个hanoi塔的递归

void hanoi(int n, char a, char b, char c){

  if(n==1){

    cout << n <<":"<<a<<"->"<<c<<endl;

  }else{

    hanoi(n-1,a,c,b);

    cout << n <<":"<<a<<"->"<<c<<endl;

    hanoi(n-1,b,a,c);

  }

}

你可能感兴趣的:(递归)