该程序应该从用户处取名并向后输出。我们的教授说我们不得不使用递归,而我正在努力不去无限地进行递归。请帮忙。
#include <stdio.h>
#include <string.h>
void reversedWord(char input[],int size)
{ int count;
int count2;
if(count==0) {
count2=size;
}
count2=count2-1;
char store;
store=input[count2];
input[count2]=input[count];
input[count]=store;
count=count+1;
if(count>size)
{
return;
}
return reversedWord(input,size);
}
int main()
{
char input[100];
printf("Please enter your name: ");
scanf("%s",input);
int size=strlen(input);
reversedWord(input,size);
printf("\n Your name backwards: %s \n",input);
}
答案 0 :(得分:0)
由于您在递归函数中使用了计数器,因此它们应该是static
,我建议您阅读有关static
C语言中的内容的文档,如果它对您不熟悉的话。
下面是带有工作递归的代码,但是你的单词reversion算法包含一个错误。我相信你可以通过一些思考来解决它,所以我只是给出一个提示 - 它会反转这个词,但然后再将它反转回来。
#include<stdio.h>
#include<string.h>
void reversedWord(char input[],int size)
{
static int count = 0;
static int count2;
if(count==0) {
count2=size;
}
count2=count2-1;
char store;
store=input[count2];
input[count2]=input[count];
input[count]=store;
count=count+1;
if(count>size)
{
return;
}
reversedWord(input,size);
return;
}
int main()
{
char input[100];
printf("Please enter your name: ");
scanf("%s",input);
int size=strlen(input);
reversedWord(input,size);
printf("\n Your name backwards: %s \n",input);
}
答案 1 :(得分:0)
首先在上面的代码中,您需要初始化变量count和count2。
语句int count;表示您声明整数类型的变量计数。但它并没有任何价值。
对于这个让递归工作的例子,你需要在每次调用函数时传递3个参数(输入字符串,start_index,end_index)。
这是修改过的代码,可以使用
void reversedWord(char input[],int start,int end)
{
end=end-1;
char store;
store=input[end];
input[end]=input[start];
input[start]=store;
start=start+1;
if(start>=end)
{
return;
}
return reversedWord(input,start,end);
}
int main()
{
char input[100];
printf("Please enter your name: ");
scanf("%s",input);
int size=strlen(input);
reversedWord(input,0,size);
printf("\n Your name backwards: %s \n",input);
}
答案 2 :(得分:0)
我认为即使你为count和count2赋值为零,这也不行,因为你是递归调用函数的。
因此,每次调用reverseWord(输入,大小)时,都会再次初始化值;
> void reversedWord(char input[],int size) { int count; //initialized
> for every recursive call
> int count2; //initialized for every recursive call
> if(count==0) {
> count2=size;
> }
> count2=count2-1;
> char store;
> store=input[count2];
> input[count2]=input[count];
> input[count]=store;
> count=count+1;
> if(count>size)
> {
> return;
> }
> return reversedWord(input,size); }
更好的解决方案是将这两个变量count和count2声明为static。 static int count,count2; 默认情况下,静态变量被指定为0并且它们共享一个公共内存,因此没有为它们分配新空间,并且新值反映在同一个变量上(仅初始化一次)