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%b
ist 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 a
oder 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 a
und b
vertauscht sind. Der Hilfsaufruf a?b
zählt die Pfade, auf denen der erste Zug abnimmt a
, und somit auch die Pfade, auf b?a
denen der erste Zug abnimmt b
. Diese sind im Allgemeinen unterschiedlich und tragen dazu bei a%b
.
Die Summation in a?b
kann 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%i
durch a?i+i?a
in 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=1
hätte sein müssen 0%0=0?0+0?0=2
. Auf diese Weise können Sie define verwenden, f n=n?n
ohne die Halbierung, die wir sonst benötigen würden.