Cur*_*ind -5 c++ algorithm recursion
下面是一个(平凡的)C++ 函数,它返回其参数的平方(一个非负整数):
unsigned int square(unsigned int n) {
return n*n;
}
Run Code Online (Sandbox Code Playgroud)
你的工作:编写一个函数,它也返回 n 2但有以下约束:
*/然而, …
+和-运算符。到目前为止,我已经尝试使用 n(n+n+n+...) 来获得平方,但是为此我需要一些可以跟踪递归循环的东西,但是因为该函数只能有一个参数,所以我需要另一种方法来解决这个问题。
为了将平方运算作为递归函数来实现,您首先需要用运算本身来表示:
(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
}
Run Code Online (Sandbox Code Playgroud)
或者只是使用三元运算符的单个语句:
unsigned int square(unsigned int n) {
return n? square(n-1) + n + n - 1: 0;
}
Run Code Online (Sandbox Code Playgroud)
n等于 0 是基本情况(即,当递归停止时)。对于这种情况,它返回零,因为 0 2为零。