【发布时间】:2015-08-25 03:27:57
【问题描述】:
我正在尝试使用递归类型程序计算代表二进制数的字符数组中的个数。但是,似乎我的程序只是在计算数组中的字符数。我不知道我是否只是在比较错误,但我似乎找不到问题
#include <stdio.h>
# include <stdlib.h>
#include <string.h>
#define SIZE 20
int determine (char array[SIZE], int count, int track );
int main()
{
int answer = 0;
char input[SIZE]={"1001001"};
int count = 0;
int track = 0;
answer = determine(input, count, track);
printf("The number of 1's is %d ", answer);
system("PAUSE");
return 0;
}
int determine(char array[], int count, int track)
{
if (array[track] != '\0')
{
if ( array[track] == '1');
{
count++;
}
return determine(array, count, track = track+1);
}
else
{
return count;
}
}
【问题讨论】:
-
另外:将递归用作迭代器是对递归的不良使用。考虑改为将数组在每次迭代(递归)中分成两半,并将两半的结果相加。这不会降低运行时的复杂性顺序,但您的最大递归深度将是
log2(n)而不是n。 -
@chux 虽然我同意你的 cmets,但这可能是教师需要使用递归的课堂作业。
-
@Code-Apprentice 我的建议仍然使用递归。为了清楚起见,重新措辞。
-
track = track+1可以简化为track+1。在大型表达式中嵌入赋值被认为是一种不好的做法,因为它可能导致不同编译器之间的不同行为。在这种情况下,它可能不会造成任何问题,但我建议您以后避免这样做。 -
@chux 对……我第一次确实读到了你的评论。我还应该说明另一个猜测,即参数的数量可能由讲师指定。如果我理解正确,您的替代解决方案至少需要一个参数来给出要处理的数组部分的开头和结尾。
标签: c arrays comparison character