math@python双阶乘@累乘的多种实现方式
-
m ! ! = m ( m − 2 ) ( m − 4 ) ⋯ = ∏ i = 0 k ( m − 2 i ) q = f l o o r [ m 2 ] r = ( m ) % 2 ∈ { 0 , 1 } k = { q , r = 1 q − 1 , r = 0 熟悉计算机的同学 , 应该能够写出 k 展开式的简写形式 k = q − 1 + r ( r = 1 或 0 ) ; 从 0 开始计数 m!!=m(m-2)(m-4)\cdots =\prod_{i=0}^{k}(m-2i) \\ q=floor[\frac{m}{2}] \\ r=(m)\%2\in\{0,1\} \\ k=\begin{cases} q,r=1 \\ q-1,r=0 \end{cases} \\熟悉计算机的同学,应该能够写出k展开式的简写形式 \\ k=q-1+r(r=1或0);从0开始计数 m!!=m(m−2)(m−4)⋯=i=0∏k(m−2i)q=floor[2m]r=(m)%2∈{0,1}k={q,r=1q−1,r=0熟悉计算机的同学,应该能够写出k展开式的简写形式k=q−1+r(r=1或0);从0开始计数
-
上面两个k的展开式具有相同的效果,后者的好处是可以简化代码(不需要判断r的值)
-
事实上,容易发现序列
S=m,m-2,m-4,...
是一个等差数列-
a 1 = m a_1=m a1=m
-
d = − 2 d=-2 d=−2
-
a k = a 1 − 2 ( k − 1 ) a_k=a_1-2(k-1) ak=a1−2(k−1)
- 从1开始计数
-
根据m的奇偶性,最后一项记为 a k a_k ak
- a k = 1 , m % 2 = 1 a_k=1,m\%2=1 ak=1,m%2=1
- a k = 2 , m % 2 = 0 a_k=2,m\%2=0 ak=2,m%2=0
- 合起来写,就是 a k = 2 1 − m % 2 a_k=2^{1-m\%2} ak=21−m%2
-
2 ( k − 1 ) = a 1 − a k k = a 1 − a k 2 + 1 k 1 = m − 1 2 + 1 = m + 1 2 , m % 2 = 1 k 2 = m − 2 2 + 1 = m 2 , m % 2 = 0 合起来写 k = c e i l ( m 2 ) ; 从 1 计数 k 0 = c e i l ( m 2 ) − 1 = f l o o r ( m 2 ) + m % 2 − 1 ; 从 0 开始计数 ⌈ x ⌉ = { ⌊ x ⌋ = x , x ∈ Z ⌊ x ⌋ + 1 , x ∉ Z 2(k-1)=a_1-a_k \\k=\frac{a_1-a_k}{2}+1 \\k_1=\frac{m-1}{2}+1=\frac{m+1}{2},m\%2=1 \\k_2=\frac{m-2}{2}+1=\frac{m}{2},m\%2=0 \\合起来写 \\k=ceil(\frac{m}{2});从1计数 \\k_0=ceil(\frac{m}{2})-1=floor(\frac{m}{2})+m\%2-1;从0开始计数 \\ \lceil{x}\rceil =\begin{cases} {\lfloor{x}\rfloor=x},&x\in{Z} \\ {\lfloor{x}\rfloor}+1,&x\notin{Z} \end{cases} 2(k−1)=a1−akk=2a1−ak+1k1=2m−1+1=2m+1,m%2=1k2=2m−2+1=2m,m%2=0合起来写k=ceil(2m);从1计数k0=ceil(2m)−1=floor(2m)+m%2−1;从0开始计数⌈x⌉={⌊x⌋=x,⌊x⌋+1,x∈Zx∈/Z
-
-
地推关系
-
m ! ! = m ⋅ ( m − 2 ) ! ! m!!=m\cdot{(m-2)!!} m!!=m⋅(m−2)!!
- 从分割的角度,序列S包含的项数n可以这样确定
- 相邻项的关系是 a i = a i − 1 − 2 a_i=a_{i-1}-2 ai=ai−1−2
- 对于有限数列
- 将第一项理解为,资源总量 a 1 a_1 a1
- 第二项为每次消耗的固定量资源(d)
- 那么数列的项数和第一项和公差的比值 a 1 d \frac{a_1}{d} da1有关
- 从分割的角度,序列S包含的项数n可以这样确定
参考代码
-
# importing functools for reduce() # import functools as ft from functools import reduce def df_reduce(n): l = range(n, 0, -2) res = reduce(lambda x, y: x * y, l) # print("n=%-3d-->" % n, "{:-^30}".format(list_str), "product_res=%d" % res) return res def df_while(n): res = 1 while (n > 0): res *= n n = n-2 return res def product(x, y): return x*y def df_k(n): q = n//2 r = n % 2 k = q-1+r l = range(0, k+1) res_list = [n-2*i for i in l] res = reduce(product, res_list) return res def df_recursive(n): if (n == 1 or n == 2): return n return n*df_recursive(n-2) def df_print(df_fun, n): res = df_fun(n) print("n=%-3d-->" % n, "product_res=%d" % res) def df_reduce_print(n): df_print(df_reduce, n) def df_while_print(n): df_print(df_while, n) def df_k_print(n): df_print(df_k, n) def df_recursive_print(n): df_print(df_recursive, n) def test(df_implements): for df_fun in df_implements: print("{:*^70}".format(str(df_fun))) list(map(df_fun, test_list)) ## test_list = [3, 4, 5, 8, 9, 16] if __name__ == "__main__": # res = list(map(df_while_print, test_list)) df_implements = [df_k_print, df_while_print, df_reduce_print,df_recursive_print] test(df_implements) # list(map(df_recursive_print,test_list)) # print(df_k(5)) -
PS D:\repos\PythonLearn\scripts> py double_factorial.py *************<function df_k_print at 0x00000194A7110160>************** n=3 --> product_res=3 n=4 --> product_res=8 n=5 --> product_res=15 n=8 --> product_res=384 n=9 --> product_res=945 n=16 --> product_res=10321920 ***********<function df_while_print at 0x00000194A71100D0>************ n=3 --> product_res=3 n=4 --> product_res=8 n=5 --> product_res=15 n=8 --> product_res=384 n=9 --> product_res=945 n=16 --> product_res=10321920 ***********<function df_reduce_print at 0x00000194A7110040>*********** n=3 --> product_res=3 n=4 --> product_res=8 n=5 --> product_res=15 n=8 --> product_res=384 n=9 --> product_res=945 n=16 --> product_res=10321920 *********<function df_recursive_print at 0x00000194A71101F0>********** n=3 --> product_res=3 n=4 --> product_res=8 n=5 --> product_res=15 n=8 --> product_res=384 n=9 --> product_res=945 n=16 --> product_res=10321920 PS D:\repos\PythonLearn\scripts>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-09-20 URL_什么是URL(file url for windows examples)