其实有两个解法,
1.按照以前的做法,你要算第几行,把这一行整个都算一遍
2.按照公式
先用普通的方式来解决
先当时写过的框架
把2带入进来看看
把3带入进来,试试这边的
这是最简单的思路
评价一下,空间使用太多,如果使用100行那就每行都要计算
按照以前的解法可以不用这个东西
新旧两行来解决,一次性开辟新行
append如果在给它分配的内存满了,还要append需要挪动内存
新一行是旧一行得来的
新一行顶掉旧的一行得来的
到2的时候,要补充内层循环
效率比较差,是因为毕竟在反复开启内存,会产生大量gc
吧打印去掉,就跟我们刚才的数值一样
%%timeit是ipython的东西
跑了7圈,70w次,4.46微秒·
3.58微秒
看一下两种有什么时间上的差异
增加一下次数
在没有引起垃圾回收的时候,上面的算法没有下面算法好
append方式,在开辟好后的空间追加,效率还是比价低的,不如直接修改
在测算的时候尽量把io的去掉,print这种都是比较耗时的
下面大上面小,算出来一定是分数,小数
m个取n个,哪个是最大值,m是最大值
m-n小于m,n小于m
算300的时候,没必要算三次,300阶乘已经包含了10的阶乘从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。
*公 式C(n,m)=n!/((n-m)!m!)(m≤n)
性质C(n,m)= C(n,n-m)
性质C(n,m)=C(n-1,m-1)+C(n-1,m)
第三个方法
https://baike.baidu.com/item/杨辉三角/215098?fr=aladdin
一般有分母先把分母计算完再进行整除
r和d相等的情况下,只进来一次,,这样写是不行的
写了分支就意义不同,所以保留三个选项
用阶乘的方式就是,撑死弄了三个元素的列表,再内存不停的计算,空间复杂度是大O(1)的
只需要算阶乘就够
阶乘就是个简单的乘法
明显速度快
阶乘算一遍就行了,组合数方式是最快的方式,但是其实主要是练习列表