use*_*211 1 c recursion infinite-loop
以下程序不生成输出.它进入for循环并获取一个值(via scanf)但在此之后代码块停止执行.Ideone(在线编译器和调试工具)表示生成了SIGXCPU信号.
#include <stdio.h>
#include <stdlib.h>
long fact(int);
int z(int);
int main()
{
int i, n;
scanf("%d",&n);
int a[10];long b[10];
int c[10];
for(i=0;i<n;i++)
{
scanf("%d", &a[i]);
b[i]=fact(a[i]);
c[i]=z(b[i]);
}
printf("\n");
for(i=0; i<n; i++)
{
printf("%d", c[i]);
}
return 0;
}
long fact(int m)
{
if (m==1) return 1;
else return (m*fact(m-1));
}
int z (int s)
{
int c=0, temp;
temp=s%10;
if(temp!=0) return c;
else
{
c++; z(temp);
}
}
Run Code Online (Sandbox Code Playgroud)
SIGXCPU信号是什么意思?
小智 7
在SIGXCPU它超过其上消耗的处理器时间限制之后信号被发送的每个第二至过程(RLIMIT_CPU),或者,对于实时进程,其上没有睡眠运行极限.这里的问题是您的递归z函数不会停止并一次又一次地调用自身(并导致堆栈溢出).修复其停止状态.
从信号手册页:
Run Code Online (Sandbox Code Playgroud)Signal | Default Action | Description -------+----------------+------------------------- SIGXCPU| A | CPU time limit exceeded.默认操作如下:
A - 过程异常终止.另外,可能发生实现定义的异常终止动作,例如创建核心文件.