我对visual studio中的调试\发布模式有疑问。
我编写了一个递归程序,它获取一个整数数组(最大大小为20个单元格)并按照该规则重新排列:
第一个数字是素数,之后是(非素数),数字可以被2整除,然后是可以被3整除的数字,然后是5,乘以7,乘以11等等......
我不知道为什么,但是当程序在调试模式下运行时,它会立即成功完成。但在发布模式下大约需要3.5分钟。为什么会有很大的不同?
我不知道问题是效率低下还是其他问题。如果代码太长而无法理解,那没关系,我会很高兴只是为了指导。
这是代码:
int main()
{
printf("What is the size of the array?\n");
scanf("%d",&arrySize);
printf("Enter %d integers\n",arrySize);
inputArry(arry,arrySize,0);
arrangeArry(arry,1,arrySize);
printArry(arry,0,arrySize);
main();
return 0;
}
//insert numbers to array
void inputArry (int arry[], int size, int index)
{
if (index>size-1)
return;
scanf("%d",&arry[index]);
inputArry(arry,size,index+1);
}
void arrangeArry (int arry[], int index, int size) // Arrange array
{
if (index >=size)
return;
arrangeSubArry(arry,index);
arrangeArry(arry,index+1,size);
}
// Given arranged array except the last number, this
// function arranges the array including the last number
void arrangeSubArry (int arry[], int index)
{
int temp=0;
if (index==0)
return;
if (dividedBy(arry[index],2)<dividedBy(arry[index-1],2))
{
temp=arry[index];
arry[index]=arry[index-1];
arry[index-1]=temp;
arrangeSubArry(arry,index-1);
}
}
// Gives the first prime number that int num is divided by
int dividedBy (int num, int counter)
{
if (num==1||num==0||isPrime(num,sqrt(num))==1)
return 1;
if (isPrime(counter,sqrt(counter))==1)
{
if (num%counter==0)
return counter;
}
dividedBy(num, counter+1);
}
答案 0 :(得分:2)
我对visual studio中的调试\发布模式有疑问。
它实际上不与调试或发布版本有关。
我写了一个递归程序,它获取了一个整数数组
没有基本情况。有些东西需要阻止递归。
int main()
{
...
main();
return 0;
}
在C ++程序中调用main
是未定义的行为。见Can main function call itself in C++?。一旦程序非法,任何事情都可能发生,一切正常。
答案 1 :(得分:0)
如果没有例如段错误,我无法看到main的递归执行会以任何方式结束。
递归算法总是应该定义退出条件:
int main(void) {
/* code */
if(/* condition */) {
main();
}
/* So, we have our chances to return from main */
return 0;
}
但请勿以此方式致电main
。将主体包裹到另一个功能中并改为调用它。
请原谅我,就像你注意到的那样,“代码太长而无法理解”,但问题的答案是:处理对main的无限调用。