求大佬解惑

为什么这段代码里面factorial函数里printf会影响s的值,求大佬解决
#include<stdio.h>
int factorial(int n){
	int k=1;
	if(n==1) 
	{
		printf("hha%d %d\n",k,n);
		return k;
	}
    else k=n*factorial(n-1);
	printf("%d %d\n",k,n);
}
int main(){
	int n,s=0;
    scanf("%d",&n);
	for( ;n>0;n--){
		printf("%d!=%d\n",n,factorial(n));
		s=s+factorial(n);
		printf("!%d\n",s);
	}
	
	return 0;
}

全部评论
因为你没return
点赞 回复
分享
发布于 2020-01-20 19:49
?我更想知道你为啥没爆炸?我怀疑是自动把eax寄存器直接送回来了,所以变成了充满玄学色彩的运行时数据。正确写法如下: int ***(int n) { return n<=1?1:n****(n-1); }
点赞 回复
分享
发布于 2020-01-20 20:03
阅文集团
校招火热招聘中
官网直投
反汇编看看不就知道了吗。。。不是所有执行都有return,默认返回了eax,加了printf就返回了printf之后的eax,如果开了gs还会是其他值。
点赞 回复
分享
发布于 2020-01-20 21:10

相关推荐

1 1 评论
分享
牛客网
牛客企业服务