注册 登录
编程论坛 C++教室

一个错误的递归程序!

lixang 发布于 2007-03-05 21:49, 461 次点击
请大家指点我的程序那里出问题拉!
//用一个递归函数将字符串逆序输出
#include<iostream>
using namespace std;
void f( char* p_Arr) //p_Arr一个指向字符串的指针
{
if (*p_Arr=='\0') p_Arr--;
else f(p_Arr++) ;
cout<<*p_Arr;
}
void main()
{
char Arr[5]="abcd";
f(Arr);
cout<<"程序结束";
}
8 回复
#2
wfpb2007-03-05 21:58
else
{
f(p_Arr+1) ;
cout<<*p_Arr;
}
#3
lixang2007-03-06 19:52
wfpb
你好:
else
{
f(p_Arr+1) ;
cout<<*p_Arr;
}
else
{
f(p_Arr++) ;
cout<<*p_Arr;
}
递归里面的“p_Arr++”与“p_Arr+1”不同在那里呢?
#4
wfpb2007-03-07 00:10

f(p_Arr++);
相当于
f(p_Arr);
p_Arr++;

#5
cctv2cctv2007-03-08 10:50
if (*p_Arr=='\0') p_Arr--;改成if (*p_Arr=='\0');试试
俺没试过

[此贴子已经被作者于2007-3-8 10:52:59编辑过]

#6
nuciewth2007-03-08 21:58
以下是引用lixang在2007-3-6 19:52:12的发言:
wfpb
你好:
else
{
f(p_Arr+1) ;
cout<<*p_Arr;
}
else
{
f(p_Arr++) ;
cout<<*p_Arr;
}
递归里面的“p_Arr++”会改变p_Arr,与“p_Arr+1”不会不同在那里呢?

#7
wfpb2007-03-09 23:25

回复楼上,不同之处在于后面的cout输出的内容。

#8
lehmann2007-03-11 21:16
不知道大家发现没,上面修改后运行的结果是ddcba
我又修改了一下
#include<iostream>
using namespace std;
void f( char* p_Arr) //p_Arr一个指向字符串的指针
{
if (*p_Arr=='\0')
{
p_Arr--;
}
else
{
if(*(p_Arr+1)!='\0')//在这里防止d被输出两次
f(p_Arr+1) ;
}
cout<<*p_Arr;
}
#9
wfpb2007-03-12 01:20
恩,谢谢指出,的确需要判断一下
1