今天我接受了采访,我不知道如何回答这个问题...
给出一个递归算法,找出第一个
n
个奇数正整数的总和。
例如:
如果n=3
则正整数为1+3+5
,总和为9
。
答案 0 :(得分:4)
使用递归是不必要的开销,但这符合要求:
代码:(Demo)
function sum_recursive($n){
return ($n<<1)-1 + ($n>1 ? sum_recursive($n-1) : 0);
}
$number_of_odd_numbers=range(1,10); // test cases
foreach($number_of_odd_numbers as $n){ // iterate test cases
echo "$n => " , sum_recursive($n) , "\n";
}
功能逻辑:
$n
始终为1
或更长时间,因此无法检查0
。$n
乘以2
(一次),然后减去1,并将该数字添加到递归调用中#39 ; s返回值。$n
减少到1
时,停止递归并将0
添加到计算中。输出:
1 => 1
2 => 4
3 => 9
4 => 16
5 => 25
6 => 36
7 => 49
8 => 64
9 => 81
10 => 100
除了问题要求之外,纯粹的算术方法将非常快速和简短的代码(新学校风格少至5个字符):
pow($n,2) // pow() is the old-school call
$n**2 // is new-school
实施:(Demo)
$number_of_odd_numbers=range(1,10); // test cases
foreach($number_of_odd_numbers as $n){ // iterate test cases
echo "$n => " , pow($n,2) , "\n";
// ^^-input ^^^^^^^^^--- square $n
}
输出:
1 => 1 // 1
2 => 4 // 1,3
3 => 9 // 1,3,5
4 => 16 // 1,3,5,7
5 => 25 // 1,3,5,7,9
6 => 36 // 1,3,5,7,9,11
7 => 49 // 1,3,5,7,9,11,13
8 => 64 // 1,3,5,7,9,11,13,15
9 => 81 // 1,3,5,7,9,11,13,15,17
10 => 100 // 1,3,5,7,9,11,13,15,17,19