我的C程序无限递归,我无法弄清楚为什么

时间:2018-01-25 05:34:00

标签: c recursion

该程序应该从用户处取名并向后输出。我们的教授说我们不得不使用递归,而我正在努力不去无限地进行递归。请帮忙。

#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);
}

3 个答案:

答案 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并且它们共享一个公共内存,因此没有为它们分配新空间,并且新值反映在同一个变量上(仅初始化一次)