首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关递归,该怎么处理

2012-03-05 
有关递归这是“TheCprogramminglanguage 中的有关递归的一道题,我线给出我的程序,然后请大家评价一下或给

有关递归
这是   “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 ");

}

热点排行