我的程序一直在崩溃。这些代码似乎合法且正确。不知道有什么问题。
#include <stdio.h>
void queue(int length,int turns){
int permutations,totalTurns;
turns++;
if (length>0){
queue(length-1,turns);
if (length>1){
queue(length-2,turns);
}
}
else{
permutations++;
totalTurns+=turns;
}
}
int main()
{
while(true){
int length;
float average;
int permutations=0;
int totalTurns=0;
printf("Queue length: ");
scanf("%d", &length);
queue(length,-1);
average=totalTurns/permutations;
printf("The average turns are %f", average);
}
}
答案 0 :(得分:7)
int permutations=0;
average=totalTurns/permutations;
你除以零。
请注意,您在permutations
中声明的main()
变量与queue()
中的变量不同。
您应该从permutations
返回queue()
值,如下所示:
int queue(int length,int turns){
int permutations = 0;
...
return permutations;
}
int main(void) {
...
int permutations = queue(length,-1);
}
答案 1 :(得分:2)
你应该将排列声明为全局变量,即在main函数之外以及totalTurns,因为正如其他人所提到的那样它总是0,因为即使你认为它在函数队列中声明它也被遗忘在它之外。
#include <stdio.h>
static int permutations=0;
static int totalTurns=0;
void queue(int length,int turns){
turns++;
if (length>0){
queue(length-1,turns);
if (length>1){
queue(length-2,turns);
}
}
else{
permutations++;
totalTurns+=turns;
}
}
int main()
{
while(true){
int length;
float average;
int totalTurns=0;
printf("Queue length: ");
scanf("%d", &length);
queue(length,-1);
average=totalTurns/permutations;
printf("The average turns are %f", average);
}
}