2. (简答题, 5分) 使用递归函数实现奇数数列1,3,5,7,。。。的累乘积 1)分析出递推公式。 2)按照编写递归函数的3板斧实现递归函数。 3)在main函数中调用递归函数,求出前5项数列的累乘积。 4)参考教材166页,画出函数调用的实参和返回值。
时间: 2024-12-19 09:28:29 浏览: 2
fibo.rar_fibo_fibo数列的函数_裴波那挈数列递归算法
2. (简答题)
(1) **递推公式**:奇数数列1, 3, 5, 7,...的累乘积可以使用数学归纳法来确定。对于第n个奇数,它是前一个奇数乘以2再加1,即`an = 2 * (an-1) + 1`。初始条件是`a1 = 1`。累乘积公式为`product(n) = product(n-1) * an`。
(2) **递归函数**实现(3板斧):
```c++
// 基本情况:n=1时,累乘积就是1
int factorial_odd(int n, int product = 1) {
// 递归条件:n>1时,累乘积为前一项的倍数加一
if (n > 1) {
product *= 2;
product += 1;
}
// 返回当前n的累乘积,同时传递下一项的计算结果给下一次调用
return n == 1 ? product : factorial_odd(n - 1, product);
}
```
(3) **main函数调用**:
```c++
#include <iostream>
int main() {
int result = factorial_odd(5); // 求前5项的累乘积
std::cout << "前5项的累乘积是: " << result << std::endl;
return 0;
}
```
(4) **函数调用图**:
当调用`factorial_odd(5)`时,实际上是这样的递归链条:`factorial_odd(5) -> factorial_odd(4) -> ... -> factorial_odd(1)`。每一层递归调用都会将`product`更新为当前奇数乘以前一层的`product`,直到达到基本情况`n=1`。每次返回时,`product`都会携带下一级的累乘积。
阅读全文