指定数字以内的所有排列组合:

定义名称版:

=pmtB(指定数字)
     =LAMBDA(x,IF(x=1,1,VSTACK(pmtB(x-1),SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x))))

不定义名称版:

=LET(fx,LAMBDA(npmtB,x,IF(x=1,1,VSTACK(npmtB(npmtB,x-1),SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x)))),fx(fx,B5))

看一下效果:

递归示例-指定数字以内的所有排列组合(Base)_递归

递归部分,就是一个纵向的堆叠,把1个数、两个数、三个数排列组合累在一起。

关键是Base!

 这是一个将10进制转成任意进制的函数,需要转成几进制,第二参数就用几;转出来的结果要显示成几位数,第三参数就用几。

比如把0、1、2、3四个数转成二进制,保留两位,得到的结果分别是00、01、10、11。这结果是不是有种眼熟感?

对了,把0换成2,就是1和2的所有组合:22、21、12、11。

所以也可以反过来说,1和2的所有组合,就是4(也可以说成2的2次方)个数字的二进制,显示两位,再把其中的0换成2……这么多2(……

那么,1、2、3的所有组合,不就是27(3的3次方)个数的三进制,显示三位,再把其中的0换成3……

所以这公式就是:

=SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x)

其中的x就是所期待的几位数……好吧,Excel同学最大就只能算到7。

没办法,谁让人家最多才一百多万行的容量呢。