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