0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Probieren Sie es online!
Eine ziemlich direkte Implementierung, die über 2 Variablen rekursiv ist.
So können wir diese Lösung erhalten. Beginnen Sie mit dem Code, der eine direkte rekursive Formel implementiert:
54 Bytes
0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n
Probieren Sie es online!
Mit flawr der Saatkrähe bewegen Interpretation , a%bist die Anzahl der Pfade, die die Saatkrähe bekommen von (a,b)zu (0,0)verwenden nur die Abnahme bewegt sich eine Koordinate. Der erste Zug nimmt entweder ab aoder ab b, der andere bleibt gleich, daher die rekursive Formel.
49 Bytes
a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n
Probieren Sie es online!
Wir können die Wiederholung vermeiden, map(a%)[0..b-1]++map(b%)[0..a-1]indem wir feststellen, dass die beiden Hälften gleich aund bvertauscht sind. Der Hilfsaufruf a?bzählt die Pfade, auf denen der erste Zug abnimmt a, und somit auch die Pfade, auf b?adenen der erste Zug abnimmt b. Diese sind im Allgemeinen unterschiedlich und tragen dazu bei a%b.
Die Summation in a?bkann auch als Listenverständnis geschrieben werden a?b=sum[a%i|i<-[0..b-1]].
42 Bytes
0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Probieren Sie es online!
Zum Schluss werden wir %die Rekursion los und schreiben sie einfach ?durch Ersetzen a%idurch a?i+i?ain den rekursiven Aufruf.
Der neue Basisfall führt dazu ?, dass die Ausgaben doppelt so hoch sind wie ?in der 49-Byte-Version, da dies bei 0?0=1hätte sein müssen 0%0=0?0+0?0=2. Auf diese Weise können Sie define verwenden, f n=n?nohne die Halbierung, die wir sonst benötigen würden.