下面是一个(简单的)C ++函数,该函数返回其参数的平方(一个非负整数):
unsigned int square(unsigned int n) {
return n*n;
}
您的工作:编写一个函数,该函数还返回n 2 ,但具有以下约束:
*
/
但是,...
+
和-
运算符。到目前为止,我已经尝试使用n(n + n + n + ...)求平方,但是为此,我需要一些可以跟踪递归循环的东西,但是由于该函数只能具有一个我需要的参数解决这个问题的另一种方法。
答案 0 :(得分:3)
为了将平方运算实现为递归函数,您需要首先根据自身来表示该运算:
(n-1) 2 = n 2 -2n +1 -->
n 2 =(n-1) 2 + 2n-1
然后,为了避免使用运算符*
:
2n = n + n
因此, n 2 =(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
}
或者仅使用三元运算符
unsigned int square(unsigned int n) {
return n? square(n-1) + n + n - 1: 0;
}
n
等于零是基本情况(即递归停止时)。在这种情况下,由于0 2 为零,因此它返回零。