首页 > 解决方案 > 递归函数的问题(检查一个数字是否是一个完美的平方)

问题描述

我试图在 CodeBlocks 中编写一个递归函数来检查一个自然数(一个长双精度数)是否是一个完美的正方形。这个名为“Square”的函数通过引用输入 long double S 和 n(在开头设置为 1)、bool T 和要比较的 long double。

这里的代码:

void Square(long double& S, long double& n, bool& T,long double k){
        S=S+2*n+1;
        n++;
        if(S==k){
             T=true;
        }

        if(S>k){
            T=false;

        }

        if(S<k){
            Square(S,n,T,k);
        }
}

在主要功能中:

long double S,n,k;

bool T=false;

for(long double b=1;b<50000;b++){

    for(long double a=1;a<b;a++){

        S=1;
        n=1;
        T=false;

        k=12*a*b*b*b-3*a*a*a*a;

        Square(S,n,T,k);

        if(T==true){
            cout<<a<<"    "<<b<<"   "<<k<<endl;
        }
    }
}

有时会出现此错误:“进程返回 -1073741571 (0xC00000FD)”(例如,当(a = 108 和 b = 121)并且程序停止时。有帮助吗?

标签: c++codeblocks

解决方案


尝试这个:

#include <cmath>

bool isPerfectSquare( long num ) {
    long root = long(sqrt(float(num)));
    return root * root == num;
}

你会得到True是否num是一个完美的正方形,False如果不是。


推荐阅读