有关递归
这是 “The C programming language "中的有关递归的一道题,我线给出我的程序,然后请大家评价一下或给出更简洁的解法。对于递归总是想不清楚怎么回事,这个都是勉强想出来的。
题目是:编写一个递归版本的reverse(s)函数,把字符串s颠倒过来。
我的解法:
#include <stdio.h>
#include <string.h>
int m;
void main()
{
void reverse(char *s);
char s[80],*p;
gets(s);
p=s;
m=strlen(s);
reverse(p);
puts(s);
}
int i=0;
void reverse(char *p)
{
char *q,tmp;
q=p+m-1-2*i;
if((p+1)==q || (p+2)==q)
{
tmp=*p;
*p=*q;
*q=tmp;
}
else
{
i++;
reverse(++p);
p--;
tmp=*p;
*p=*q;
*q=tmp;
}
}
[解决办法]
写个玩玩,没考虑效率,因为函数原形一应要 void reverse(char* s); 就这样写了
void reverse(char* s)
{
if (!s)
return;
int len = strlen(s);
if (len <= 1)
return;
int left_len = len / 2;
int right_len = len - left_len;
char* left = new char[left_len + 1];
char* right = new char[right_len + 1];
if (!left || !right)
return;
char* p = &s[left_len];
strncpy(left, s, left_len);
left[left_len] = '\0 ';
strncpy(right, p, right_len);
right[right_len] = '\0 ';
reverse(left);
reverse(right);
strncpy(p, left, left_len);
strncpy(s, right, right_len);
if (left)
delete[] left;
if (right)
delete[] right;
}
void main()
{
char test[] = "aaa bbb ";
cout < <test < <endl;
reverse(test);
cout < <test < <endl;
system( "pause ");
}