我正在尝试编写一个小的递归函数,以接收整数并仅使用加法返回该整数的平方。我发现的公式是:如果用户输入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);
}
答案 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;
}