递归函数在打印else语句时打印垃圾值,而不打印if语句中的值

  • 本文关键字:打印 语句 if else 递归函数 c
  • 更新时间 :
  • 英文 :

#include<stdio.h>
void recusive(int sum){
if(sum<=10)
{
sum=sum+recusive(sum+1);
printf("%d",sum);
}
else
{
printf("it's greater then 10");
}
}
main()
{
int a=0;
recusive(a);
}

这只打印else值,我不明白为什么?它打印当我在if语句中使用printf函数时,它大于10和一些垃圾值任何人都可以解释这个

如果在printf的末尾添加新行(\n(,您将能够看到不止一行。(在"main"之前也缺少一个右大括号(。

代码如下:

#include<stdio.h>
int recusive(int sum){
if(sum<=10)
{
sum=sum+recusive(sum+1);
printf("%dn",sum);
}
else
{
printf("it's greater then 10n");
}
return sum ;
}
int main()
{
int a=0;
recusive(a);
}

输出如预期:

it's greater then 10
21
30
38
45
51
56
60
63
65
66
66

您可能希望在相加时(即在递归调用函数之前(看到累积和,而不是在达到递归性的停止条件后(即在之后进入调用堆栈时(显示结果。带有以下代码:

int recusive(int sum){
if(sum<=10)
{
printf("%dn",sum);
sum=sum+recusive(sum+1);

}
else
{
printf("it's greater then 10n");
}
return sum;
}

您得到以下输出:

0
1
2
3
4
5
6
7
8
9
10
it's greater then 10