仅使用加法/递归C ++平方数

时间:2018-09-03 21:47:25

标签: c++

我正在尝试编写一个小的递归函数,以接收整数并仅使用加法返回该整数的平方。我发现的公式是:如果用户输入5,该函数将取5 +(4 + 3 + 2 + 1)+(4 + 3 + 2 + 1)=25。如果用户输入6,该函数将取6 +(5 + 4 + 3 + 2 + 1)+(5 + 4 + 3 + 2 + 1)= 36,依此类推。递归函数需要每次将整数的值减小1,并不断将其添加到原始数字中并对其进行调用,直到达到0为止。我对如何编写此值感到困惑,因为它是C ++,可以使用一些帮助。这是我的尝试(我知道这是完全错误的,但是可以提供任何帮助)

#include <iostream>

using namespace std;

int square (int n){
    int newInt = n;
    newInt = newInt -1;
    n = n + newInt;
    newInt--;
    int square(int n);
}

int main() {
    int n;
    cout<<"Enter a number to square: ";
    cin>>n;
    square(n);
}

1 个答案:

答案 0 :(得分:0)

在下面的列表中

int square (int n){
int newInt = n;
newInt = newInt -1;
n = n + newInt;
newInt--;

//and why do you write int?
int square(int n);
}

函数square()的返回值未存储在任何地方。实际上,由于没有return语句,因此您的函数什么也不返回。

设计递归函数时,首先要考虑的是递归何时结束。您的函数没有递归条件就不会返回。这意味着,当它达到0时,它将调用square(-1),依此类推。

您的代码也不会显示任何内容。

但是一个大问题-您以一种非常奇怪的方式使用函数参数。当函数接收到参数时,将对其进行复制,并将原始变量的副本存储在称为“堆栈”的位置,并使用称为RBP(基本指针)的特殊计算机寄存器进行寻址。因此,如果您有一个变量x,并且将它作为参数传递给某个函数,则如果此函数更改了它的参数,则x仍具有相同的值。因此,当您尝试更改n时,它将不起作用。要解决此问题,请使用指针或使函数返回要分配n的新值。

工作示例:

int square(int n)
{
if ( n==0 )
    return 0;
n = square(n-1) + n + n - 1;
return n;
}