我正在尝试编写一个程序来创建递归函数,该函数将使用这种情况对正整数求平方: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。
答案 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;
}