Definamos la secuencia de Fibonacci como
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
Entonces tenemos la secuencia infinita 1,2,3,5,8,13,
... Es bien sabido que cualquier entero positivo puede escribirse como la suma de algunos números de Fibonacci. La única advertencia es que esta suma podría no ser única. Siempre hay al menos una forma de escribir un número como una suma de números de Fibonacci, pero puede haber muchos más.
Su desafío es escribir un programa completo que use stdin toma un número entero positivo entre uno y un millón inclusive, y luego genera usando stdout todas las sumas posibles de números de Fibonacci que sumen la entrada. En resumen, los números de Fibonacci no deben repetirse y eso incluye el número 1
. En cualquier suma, si 1
está presente, debe estar presente solo una vez porque en mi definición de la secuencia anterior 1
aparece solo una vez. Las sumas con un solo término son válidas, por lo que si el número de entrada es un número de Fibonacci en sí, entonces el número en sí es una suma válida y debe imprimirse. Si hay varias sumas, entonces entre dos sumas debe haber una línea en blanco para distinguirlas fácilmente.
Aquí hay algunas muestras.
./myfib 1
1
Solo hay una suma de este tipo y solo tiene un término, así que eso es todo lo que se imprime.
./myfib 2
2
Tenga en cuenta aquí que 1+1
no es una suma válida porque se 1
repite.
./myfib 3
1+2
3
Dos sumas y ambas están impresas con una línea en blanco en el medio.
./myfib 10
2+8
2+3+5
./myfib 100
3+8+89
1+2+8+89
3+8+34+55
1+2+3+5+89
1+2+8+34+55
3+8+13+21+55
1+2+3+5+34+55
1+2+8+13+21+55
1+2+3+5+13+21+55
Verdadero código de golf. El código más corto en cualquier idioma gana. Publique su código con algunos casos de prueba (además del que le di anteriormente). En el caso de los empates, elijo el que tiene los votos más altos después de esperar al menos dos semanas y probablemente más. Por lo tanto, la comunidad no dude en votar las soluciones que desee. La inteligencia / belleza del código importa mucho más que quién publica primero.
¡Feliz codificación!