这是求行列式的函数,在MAIN中通过r=js(a,N)调用; 此函数在头文件中
/*js()函数用于计算行列式,通过递归算法实现*/
int js(int s[][N],int n)
{
int z,j,k,r,total=0;
int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/
if(n>2)
{
for(z=0;z<n;z++)
{
for(j=0;j<n-1;j++)
for(k=0;k<n-1;k++)
if(k>=z) b[j][k]=s[j+1][k+1];
else b[j][k]=s[j+1][k];
if(z%2==0) r=s[0][z]*js(b,n-1); /*递归调用*/
else r=(-1)*s[0][z]*js(b,n-1);
total=total+r;
}
}
else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0];
return total;
}
请问,我设置断点单步运行时,在return total; 后并没有返回mian函数,而是又继续运行JS,搞不懂?return不是从被调函数返回到主调函数继续执行么,为什么当执行到最后一个括号时反复执行?
/*js()函数用于计算行列式,通过递归算法实现*/
int js(int s[][N],int n)
{
int z,j,k,r,total=0;
int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/
if(n>2)
{
for(z=0;z<n;z++)
{
for(j=0;j<n-1;j++)
for(k=0;k<n-1;k++)
if(k>=z) b[j][k]=s[j+1][k+1];
else b[j][k]=s[j+1][k];
if(z%2==0) r=s[0][z]*js(b,n-1); /*递归调用*/
else r=(-1)*s[0][z]*js(b,n-1);
total=total+r;
}
}
else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0];
return total;
}
请问,我设置断点单步运行时,在return total; 后并没有返回mian函数,而是又继续运行JS,搞不懂?return不是从被调函数返回到主调函数继续执行么,为什么当执行到最后一个括号时反复执行?
解决方案 »
- 对接入的设备进行下载文件要开线程吗
- 调用DLL时候产生的终止错误.The program 'D:\2\2\Debug\2.exe' has exited with code 0 (0x0).
- 一直没有搞清楚数组的赋值
- 询问一个关于异步套接字的编程问题
- 关于CxImage的问题
- 关于COM实现基础的问题,小弟最后90分,跳楼大甩卖
- 如何把监听到的数据答应出来,并保存到一个文本!
- 求公网IP(最好电信)测试,运行个TCP程序!
- 如何改变caret 的高度?
- 怎样下载一个ip地址内的所有网站?
- 程序开机自动启动,并最小化到任务栏
- COM接口如何对[out,retval]类型的VARIANT参数赋值?
==看清楚了,你这个是递归调用啊。这个函数会反复调用自己,你执行到的return只是其中的某一层,它是由上一层的js函数调用的,自然会回到上一层的js函数中,要回到main函数,只能等递归完全结束了才可能。