使用单参数递归函数求一个数的平方 下面是一个(平凡的)C++函数,它返回其参数的平方(非负整数):

使用单参数递归函数求一个数的平方 下面是一个(平凡的)C++函数,它返回其参数的平方(非负整数):,c++,algorithm,recursion,C++,Algorithm,Recursion,您的工作:编写一个函数,该函数也返回n2,但具有以下约束: 不能使用乘法运算符* 不能使用除法运算符/ 不能有任何循环 不能向函数中添加任何其他参数 您的函数必须是自包含的:没有辅助函数 您不能使用任何全局变量 不能使用任何静态变量 您不能使用任何“位旋转”操作——不移位等 然而 可以使用递归 您可以使用+和-运算符 到目前为止,我已经尝试使用n(n+n+n+…)获取平方,但为此,我需要一些跟踪递归循环的东西,但因为函数只能有一个参数,我需要另一种方法来解决这个问题。为了将平方运算作为递

您的工作:编写一个函数,该函数也返回n2,但具有以下约束:

  • 不能使用乘法运算符
    *
  • 不能使用除法运算符
    /
  • 不能有任何循环
  • 不能向函数中添加任何其他参数
  • 您的函数必须是自包含的:没有辅助函数
  • 您不能使用任何全局变量
  • 不能使用任何静态变量
  • 您不能使用任何“位旋转”操作——不移位等
然而

  • 可以使用递归
  • 您可以使用
    +
    -
    运算符

到目前为止,我已经尝试使用n(n+n+n+…)获取平方,但为此,我需要一些跟踪递归循环的东西,但因为函数只能有一个参数,我需要另一种方法来解决这个问题。

为了将平方运算作为递归函数来实现,您首先需要用操作本身来表示操作:

(n-1)2=n2-2n+1
-->
n2=(n-1)2+2n-1

然后,为了避免操作员
*

unsigned int square(unsigned int n) {
   if (n == 0)
      return 0; // base case

   return square(n-1) + n + n - 1; // recursive case
}
2n=n+n

因此,n2=(n-1)2+n+n-1


记住这一点,您可以轻松地将
square()
实现为不使用运算符
*
的递归函数:

unsigned int square(unsigned int n) {
   if (n == 0)
      return 0; // base case

   return square(n-1) + n + n - 1; // recursive case
}
或者只使用一个使用三元运算符的语句:


n
等于零是基本情况(即递归停止时)。对于这种情况,它返回零,因为02是零。

提示:
n^2==(n-1)^2+n+n-1
显示失败的代码。这是一个有趣的问题,但显然也有点像家庭作业转储(这就是为什么它经常被否决的原因)。虽然到目前为止您已经解释了自己的工作,但这个练习及其解决方案对其他人来说几乎没有实际用途(除非他们必须解决完全相同的作业),因此这对stackoverflow来说不是一个好问题。@drescherjm我不认为添加明显违反其中一个约束的代码有助于改进问题。这并不是说要找到真正的答案需要大量的工作,它实际上只是一行代码,所以向它迭代现有代码是行不通的。
unsigned int square(unsigned int n) {
   return n? square(n-1) + n + n - 1: 0;
}