浅谈递归之蛋疼
最近太闲,把递归的东西整理一下。
先从最简单的字符串处理函数来看看递归函数,只追求思想,不求代码质量,虽然这些东西用递归写很蛋疼,
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);
}
}