关于递归函数返回值的问题

函数说明:这是需要将值返回给主函数的一个子函数。前面的表示通过某种方式得到一个lines向量,这个lines向量的size可以为0或者1。然后进行如下递归调用。我的想法是如果处理了1次后(此时times==1)若size仍然为0,则输出"由于图片原因没有检测出直线!角度无法矫正",并返回0.0

但是结果是:

可以输出语句,但不是返回0.0,而是返回了一个 1.#INF ,也就是除0异常。

问题是我在times==1里设置了返回啊,为什么它还会执行下去呢?

原因是:

Cout输出时直接输出到了缓冲区也就是命令窗口,但是return 0.0是被返回给了递归函数angleDetect(Mat img)(而不是主函数),这个函数收到了返回值后就继续往下执行了,而很明显size此时还是为0,所以最后返回了一个除0异常。

int times=0;
double angleDetect(Mat img)
{
    ...//可以得到一个lines值
    /*有可能检测不到直线,为避免除数为0*/
    double mean_theta=0.0;
    if (lines.size()==0)
    {
        if (times==1)
        {
            cout<<"由于图片原因没有检测出直线!角度无法矫正"<<endl;
            return 0.0;
        }
        Mat ele=getStructuringElement(MORPH_RECT,Size(2,2));
        dilate(img,img,ele);
        times++;
        angleDetect(img);//递归
        
    }
    mean_theta=mean_theta/lines.size();
    mean_theta=(float)(90.0-mean_theta*180/CV_PI);
    if (mean_theta<0)
    {
        if (mean_theta>-1.0)
        {
            mean_theta=0;
        }
    }
    
    return  mean_theta;
}
原文地址:https://www.cnblogs.com/Daringoo/p/4431449.html