python 实现double factorial recursive双阶乘递归算法

server/2024/9/25 2:29:34/

double factorial recursive双阶乘递归算法介绍

双阶乘(Double Factorial)是一个数学概念,它指的是从某个数开始,每隔一个数相乘直到1或指定的结束点。对于正整数n,其双阶乘有两种定义方式,取决于n的奇偶性:

  1. 当n是偶数时,n的双阶乘定义为 n ! ! = n × ( n − 2 ) × ( n − 4 ) × ⋯ × 4 × 2 n!!=n×(n−2)×(n−4)×⋯×4×2 n!!=n×(n2)×(n4)××4×2
  2. 当n是奇数时,n的双阶乘定义为 n ! ! = n × ( n − 2 ) × ( n − 4 ) × ⋯ × 3 × 1 n!!=n×(n−2)×(n−4)×⋯×3×1 n!!=n×(n2)×(n4)××3×1

下面是一个使用递归算法实现双阶乘的Python示例代码:

python">def double_factorial(n):# 递归终止条件if n <= 1:return 1# 递归调用if n % 2 == 0:return n * double_factorial(n-2)else:return n * double_factorial(n-1)# 注意:上面的实现对于奇数n的情况并不完全符合双阶乘的定义
# 正确的奇数n的双阶乘应该递归到1而不是n-1# 修正后的奇数n的双阶乘递归实现
def double_factorial_corrected(n):# 递归终止条件if n <= 1:return 1# 递归调用if n % 2 == 0:return n * double_factorial_corrected(n-2)else:return n * double_factorial_corrected(n-2)  # 注意这里改为n-2# 测试
print(double_factorial(6))  # 应该输出720,但上面的实现会给出错误的结果
print(double_factorial_corrected(6))  # 正确的输出720
print(double_factorial_corrected(5)) 

python_40">double factorial recursive双阶乘递归算法python实现样例

双阶乘(double factorial)是指对于一个正整数n,其双阶乘为n!!,定义为n!! = n * (n-2) * (n-4) * … * 2(当n为偶数)或者n!! = n * (n-2) * (n-4) * … * 1(当n为奇数)。

下面是用递归算法实现双阶乘的Python代码:

python">def double_factorial(n):if n == 0 or n == 1:return 1elif n % 2 == 0:return n * double_factorial(n - 2)else:return n * double_factorial(n - 2)# 测试代码
n = 7
result = double_factorial(n)
print("双阶乘的结果为:", result)

输出结果:

双阶乘的结果为: 105

http://www.ppmy.cn/server/121601.html

相关文章

用二分查询一个有序向量(或数组)中是否存在vector<T>[i]==i;

0. 下面【1】使用了类&#xff0c;【2】使用了函数 解析&#xff1a; - 因为我们的代码中不存在l mid1;r mid -1;这种可能会【跨越另一个指针】的情况&#xff0c;所以我们while条件写l1!r&#xff0c;言下之意&#xff0c;彼时你俩相差为1&#xff0c;我们就跳出循环了。…

YOLO交通目标识别数据集(红绿灯-汽车-自行车-卡车等)

YOLO交通目标识别 数据集 模型 ui界面 ✓图片数量15000&#xff0c;xml和txt标签都有&#xff1b; ✓class&#xff1a;biker&#xff0c;car&#xff0c;pedestrian&#xff0c;trafficLight&#xff0c;trafficLight-Green&#xff0c;trafficLight-GreenLeft&#xff0c; t…

数据增强:提升机器学习模型性能的利器

在机器学习领域&#xff0c;尤其是在处理图像、语音或文本等复杂数据时&#xff0c;数据的质量和数量往往是决定模型性能的关键因素之一。然而&#xff0c;在实际应用中&#xff0c;高质量且多样化的数据集往往难以获取&#xff0c;尤其是在某些专业领域或稀有事件分析中。这时…

基于微信小程序的竞赛答题小程序开发笔记(一)

开发背景调研 中小学学科答题小程序&#xff0c;适合各中小学校方&#xff0c;老师或者家长。通过互动和参与式学习&#xff0c;小程序能够通过游戏化元素提升学习的积极性和参与度&#xff0c;从而提升学习效率&#xff0c;促进学生自主学习 功能规划 分类题库&#xff1a;…

单片机学到什么程度才可以去工作?

说实话&#xff0c;10几年前&#xff0c;我自学单片机转行的时候&#xff0c;也是一头雾水&#xff0c;也是一边苦苦挣扎&#xff0c;一边迷茫的状态。 硬件、软件、编程...样样都需要学&#xff0c;连从哪儿开始都不知道&#xff0c;每次看到那些密密麻麻的电路图和代码&#…

菱形继承的类对父类的初始化、组合、多态、多态的原理等的介绍

文章目录 前言一、菱形继承的类对父类的初始化二、组合三、 多态1. 构成多态2. 虚函数3. 虚函数的重写4. 虚函数重写的两个例外1. 协变2. 析构函数的重写 5. C11 final 和 override1. final2. override 6. 设计不想被继承的类7. 重载、覆盖&#xff08;重写&#xff09;、 隐藏…

计算机复习9.23

关系&#xff1a;一张扁平的二维表&#xff0c;关系应该具备每个分量都不可分的数据(1NF) 候选码&#xff1a;某个属性组可以唯一标识一个元组&#xff0c;而其子集不能&#xff0c;候选码中的属性叫主属性 主码&#xff1a;从候选码中选取一个称为主码 全码&#xff1a;所有…

C#设计模式之访问者模式

总目录 前言 在软件构建过程中&#xff0c;由于需求的改变&#xff0c;某些类层次结构中常常需要增加新的行为&#xff0c;如果直接在基类中做这样的更改&#xff0c;将会给子类带来很繁重的变更负担&#xff0c;甚至破坏原有设计。如何在不更改类层次结构的前提下&#xff0c…