这个递归程序有什么问题

时间:2015-06-12 17:46:21

标签: c recursion

我正在尝试使用递归来反转字符串但它不起作用。 怎么了?? 它为测试用例显示了一些输出“t set a♠♣♦♥☻☺”这是一个测试“

#include "stdio.h"
#include "string.h"

void rec(char [],int,int);

void main()
{
  char ch[50];int j,i=0;
  printf("Enter the string: ");
  gets(ch);
  j=strlen(ch)-1;
  rec(ch,i,j);
  puts(ch);
}

void rec(char ch[],int i,int j)
{
  char t;
  if(i>=j)  return;
  t=ch[i];
  ch[i]=ch[j];
  ch[j]=i;
  rec(ch,++i,--j);
}

3 个答案:

答案 0 :(得分:1)

ch[j]=i;

您正在为字符分配一个不是您想要的整数。 您将值存储在t所以

ch[j] = t;

是你需要的。

答案 1 :(得分:0)

您需要更改

ch[j]=i;  

ch[j]= t;   

请注意无需null显式终止字符串strlen给出长度不包括\0字符的字符串。您正在将strlen(ch)-1传递给您的函数,这意味着它将在\0之前开始反转字符中的字符。因此,在反转之后,字符串将以空值终止。

答案 2 :(得分:0)

在本声明中

return Promise.flatMap(list, function(){
     return Promise.resolve([1, 2, 3]);
});

您使用ch[j]=i; 代替i

只用两个参数就可以简化函数编写。例如

t

并调用

void rec( char s[], size_t n )
{
    if ( !( n < 2 ) )
    {
        char c = s[0];
        s[0] = s[n-1];
        s[n-1] = c;

        rec( s + 1, n - 2 );
    }
}

现在尝试只用一个参数编写函数:rec( ch, strlen( ch ) ); :)