您可以将大于0的数字分解为正Fibonacci数的唯一和。在这个问题中,我们通过反复减去最大可能的正Fibonacci数来做到这一点。例如:
1 = 1
2 = 2
3 = 3
4 = 3 + 1
12 = 8 + 3 + 1
13 = 13
100 = 89 + 8 + 3现在,我将Fibonacci乘积称为与上面相同的列表,但是加法被乘法所取代。例如,f(100) = 89 \times 8 \times 3 = 2136。
编写给定正整数n的程序或函数,返回该数字的Fibonacci乘积。
测试案例:
1: 1
2: 2
3: 3
4: 3
5: 5
6: 5
7: 10
8: 8
9: 8
42: 272
1000: 12831
12345: 138481852236发布于 2016-05-13 10:15:46
f=lambda n,a=1,b=1:n<1or b>n and a*f(n-a)or f(n,b,a+b)只是一些很好的老递归。
发布于 2020-12-01 20:37:39
ŒṗḟÐḟÆḞ€ṪPn > 60超时
ŒṗḟÐḟÆḞ€ṪP - Main link. Takes n on the left
Œṗ - Integer partitions of n
ÆḞ€ - First n Fibonacci numbers
Ðḟ - Keep the partitions p which yield an empty list under:
ḟ - Remove all elements of p which are in the first n Fibonacci numbers
Ṫ - Take the last element
P - Product发布于 2016-05-13 10:01:01
K1WQJ0 .WgQH+Z~JZ1=*KJ=-QJ;K我想它还可以打得更远.
在网上试试!
https://codegolf.stackexchange.com/questions/79854
复制相似问题