为什么编译通过 执行却错误呢?求高人指点小弟

为什么编译通过 执行却异常呢?求高人指点小弟

丑数是只包括2,3,5这三种因子的数,另外一般把“1”当作第一个丑数。
然后列出1500个丑数
这是我的代码




#include "stdafx.h"
#include<iostream>
#include<iomanip>
#include<time.h>
using namespace std;

int power(int x,int y)
{
if(1==y)return x;
return x*power(x,y-1);
}
int _tek(int i,int j,int k)  //考虑到每个丑数的因子都是由若干个2,3,5组出
{
return power(2,i)*power(3,j)*power(5,k);
}
int min_2(int i,int j)
{
return i<j?i:j;
}
int min_3(int i,int j,int k)
{
return min_2(i,j)<k?min_2(i,j):k;
}

int _tmain(int argc, _TCHAR* argv[])
{
int i,j,k;
int tek=1;
i=k=j=0;
int r;  //指示器
int ii,jj,kk;
int w=1;   //计数器  1到1500
while(1)
{
ii=_tek(i+1,j,k);
jj=_tek(i,j+1,k);
kk=_tek(i,j,k+1);
tek=tek<min_3(ii,jj,kk)?tek:min_3(ii,jj,kk);
cout<<setw(10)<<tek;
if(tek==ii)
r=1;
else if(tek==jj)
r=2;
else if(tek==kk)
r=3;
else if(1==tek)
r=0;
switch(r)
{
case 0:
;break;
case 1:
++i;break;
case 2:
++j;break;
case 3:
++k;break;
}
++w;
if(1500==w)
break;

}

double t;    //计算运行时间的代码
clock_t time;
time=clock();
t=(double)time/CLK_TCK;
cout<<"   time is "<<t<<"  seconds "<<endl;


return 0;
}


这些是出错的截图
为什么编译通过 执行却错误呢?求高人指点小弟
异常

------解决方案--------------------
你的函数你带入power(x, 0)试一下
会发现power(x, 0)=x*power(1, 0-1)=x*power(1, -1)
                 =x*x*power(1, -2)
                 =x*x*x*power(1, -3)
就这样无限递归下去了?
------解决方案--------------------
VC2010版本的 power 你可以参考下

template<class int_type>
inline
int_type power(int_type base, int_type exponent)
{
    int_type result = 1;
    for ( int i = 0; i < exponent; ++i )
    {
        result *= base;
    }
    return result;
}


另外, 你的 power函数 修改成

int power(int x,int y)
{
    if(0==y)return x;
    return x*power(x,y-1);
}


再试试? 祝你好运!
------解决方案--------------------

int power(int x,int y)
{
    if(0==y)return x;
    if(0>y) return x / power( x, -y+1 );
    return x*power(x,y-1);
}


这样,应该会更好点