如何定义将对正整数求平方的递归函数

时间:2018-12-19 19:07:30

标签: c++

我正在尝试编写一个程序来创建递归函数,该函数将使用这种情况对正整数求平方:x ^ 2 =(x-1)^ 2 + 2x-1。打印2和4中的数字,但是,一旦我开始输入其他数字(例如5),返回的值就是11,而不是我想要的25。我是递归的新手,只是想编写一个简单的程序,但很明显我不理解数学部分,可能是错误的,我的整个程序都已关闭,但我认为我对递归的主要基础有相当好的理解。有什么建议可以帮助我更好地理解这一点吗?谢谢!

我对基本条件没有做太多事情,因为我不确定该如何处理,但是在else语句中,我键入了我认为可以使用的其他算法,例如sq(sqrt(x- 1))+(2 * x)-1;但是当我输入5时返回13。

#include <iostream>
#include <cmath>
using namespace std;

int sq(int x) {

    if (x <= 0)
        return 0;
    else
        return (sqrt(x-1)) + (2*x) - 1;
 }

int main() {
    int squarenum;
    cout << "Enter a number: ";
    cin >> squarenum;
    cout <<"Square of number: " <<  sq(squarenum) << endl;
    return 0;
}

程序必须创建一个递归函数,该函数将使用以下出现次数对正整数求平方:x ^ 2 =(x-1)^ 2 + 2x-1。

因此,当我键入5时,输出应为25,即5的平方,但将返回11。

2 个答案:

答案 0 :(得分:2)

您使用了sqrt而不是函数sq,当您以sqrt(2-1) = (2-1)^2 = 1输入2时,这是偶然的。

因此将您的行return (sqrt(x-1)) + (2*x) - 1;更改为return ((sq(x-1)) + (2*x) - 1);

应该解决您的问题!此解决方案将遵循您创建递归函数的想法,但也可以解决问题。

答案 1 :(得分:2)

当然,您必须实际进行递归调用。

inline constexpr unsigned recursive_square(unsigned x)
{
    return x <= 1? x : recursive_square(x-1) + x+x - 1;
}