添加值的递归函数正在输出异常值
Recursive function to add values is outputting unusual values
我有一个程序使用尾递归函数来添加输入的值和所有以前的值。例如,如果用户输入 3,该函数计算 3+2+1 并得到 6 的答案。然而,这仅在某些时候有效。
下面是我的代码:
int addNum(int n);
int main(int argc, char *argv[]) {
int num;
printf("Enter an integer greater than zero, (q to quit): \n");
while(scanf("%d", &num) > 0){
if(num < 0){
continue;
}
else if(num == 0){
printf("Answer = 0 \n");
}
else{
printf("Answer = %d \n", addNum(num));
}
printf("Enter a positive number: \n");
}
return 0;
}
int addNum(int n){
int answer;
if(n > 0){
answer = n += addNum(n - 1);
}
return answer;
}
我从这段代码得到的输出非常奇特。对于数字 0-6,我得到了正确的答案。一旦我得到 7 和 8,两个答案都不正确。我继续前进,9-12 的答案再次正确。那么 13 和 14 是不正确的。它一直像这样倒退第四次。如果有人可以提供帮助,我完全不知道发生了什么。如果我的代码有一些简单和错误,请不要给我答案,而是提示问题。
我将 post 下面的输出,以便您了解发生了什么。我决定为我的输出使用 pastebin 以节省空间。 http://pastebin.com/DjJfxJAT
您没有在 addNum()
中初始化 answer
,因此每当您使用 n == 0 调用它时,都会发生 undefined behavior,因为您最终会返回一个未初始化的值。只能靠运气才能得到正确答案。
我认为这段代码本身就说明了事情
int addNum(int n);
int answer=0;
int main(int argc, char *argv[]) {
int num;
printf("Enter an integer greater than zero, (q to quit): \n");
while(scanf("%d", &num) > 0){
if(num < 0){
continue;
}
else if(num == 0){
printf("Answer = 0 \n");
}
else{
answer=0;
printf("Answer = %d \n", addNum(num));
}
printf("Enter a positive number: \n");
}
return 0;
}
int addNum(int n){
if(n > 0){
answer = n += addNum(n - 1);
}
return answer;
}
我有一个程序使用尾递归函数来添加输入的值和所有以前的值。例如,如果用户输入 3,该函数计算 3+2+1 并得到 6 的答案。然而,这仅在某些时候有效。
下面是我的代码:
int addNum(int n);
int main(int argc, char *argv[]) {
int num;
printf("Enter an integer greater than zero, (q to quit): \n");
while(scanf("%d", &num) > 0){
if(num < 0){
continue;
}
else if(num == 0){
printf("Answer = 0 \n");
}
else{
printf("Answer = %d \n", addNum(num));
}
printf("Enter a positive number: \n");
}
return 0;
}
int addNum(int n){
int answer;
if(n > 0){
answer = n += addNum(n - 1);
}
return answer;
}
我从这段代码得到的输出非常奇特。对于数字 0-6,我得到了正确的答案。一旦我得到 7 和 8,两个答案都不正确。我继续前进,9-12 的答案再次正确。那么 13 和 14 是不正确的。它一直像这样倒退第四次。如果有人可以提供帮助,我完全不知道发生了什么。如果我的代码有一些简单和错误,请不要给我答案,而是提示问题。
我将 post 下面的输出,以便您了解发生了什么。我决定为我的输出使用 pastebin 以节省空间。 http://pastebin.com/DjJfxJAT
您没有在 addNum()
中初始化 answer
,因此每当您使用 n == 0 调用它时,都会发生 undefined behavior,因为您最终会返回一个未初始化的值。只能靠运气才能得到正确答案。
我认为这段代码本身就说明了事情
int addNum(int n);
int answer=0;
int main(int argc, char *argv[]) {
int num;
printf("Enter an integer greater than zero, (q to quit): \n");
while(scanf("%d", &num) > 0){
if(num < 0){
continue;
}
else if(num == 0){
printf("Answer = 0 \n");
}
else{
answer=0;
printf("Answer = %d \n", addNum(num));
}
printf("Enter a positive number: \n");
}
return 0;
}
int addNum(int n){
if(n > 0){
answer = n += addNum(n - 1);
}
return answer;
}