Definieren wir die Fibonacci-Sequenz als
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
Wir haben also die unendliche Folge 1,2,3,5,8,13,... Es ist bekannt, dass jede positive ganze Zahl als Summe einiger Fibonacci-Zahlen geschrieben werden kann. Die einzige Einschränkung ist, dass diese Summe möglicherweise nicht eindeutig ist. Es gibt immer mindestens eine Möglichkeit, eine Zahl als Summe von Fibonacci-Zahlen zu schreiben, aber es kann noch viele weitere geben.
Ihre Herausforderung besteht darin, ein vollständiges Programm zu schreiben, das mit stdin eine positive ganze Zahl zwischen einer und einer Million einschließlich aufnimmt und dann mit stdout alle möglichen Summierungen von Fibonacci-Zahlen ausgibt, die sich zur Eingabe summieren. In einer Summe dürfen sich die Fibonacci-Zahlen nicht wiederholen und das schließt die Zahl ein 1. Wenn eine Summation 1vorhanden ist, darf sie nur einmal vorhanden sein, da sie in meiner Definition der obigen Sequenz 1nur einmal vorkommt. Summierungen mit nur Term sind gültig. Wenn die eingegebene Nummer eine Fibonacci-Nummer selbst ist, ist die Nummer selbst eine gültige Summierung und muss gedruckt werden. Wenn mehrere Summen vorhanden sind, muss zwischen zwei beliebigen Summen eine Leerzeile stehen, um leicht zwischen ihnen unterscheiden zu können.
Hier sind einige Beispiele.
./myfib 1
1
Es gibt nur eine solche Summe und sie hat nur einen Begriff, das ist alles, was gedruckt wird.
./myfib 2
2
Beachten Sie hier, dass dies 1+1keine gültige Summe ist, da sich dies 1wiederholt.
./myfib 3
1+2
3
Zwei Summen und beide werden mit einer Leerzeile dazwischen gedruckt.
./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
Echter Code-Golf. Der kürzeste Code in einer Sprache gewinnt. Bitte posten Sie Ihren Code mit einigen Testfällen (außer dem oben angegebenen). Bei Krawatten wähle ich die mit den höchsten Stimmen aus, nachdem ich mindestens zwei Wochen und wahrscheinlich länger gewartet habe. Daher kann die Community gerne alle Lösungen bewerten, die Sie mögen. Die Klugheit / Schönheit des Codes ist viel wichtiger als die, die zuerst posten.
Viel Spaß beim Codieren!