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