0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Cobalah online!
Implementasi yang cukup langsung yang berulang lebih dari 2 variabel.
Inilah cara kami mendapatkan solusi ini. Mulai dengan kode yang menerapkan formula rekursif langsung:
54 byte
0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n
Cobalah online!
Menggunakan interpretasi benteng bergerak flawr ini , a%badalah jumlah jalur yang mendapatkan benteng dari (a,b)ke (0,0), menggunakan hanya bergerak penurunan koordinat. Langkah pertama mengurangi aatau mengurangi b, menjaga yang lain sama, maka rumus rekursif.
49 byte
a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n
Cobalah online!
Kita dapat menghindari pengulangan map(a%)[0..b-1]++map(b%)[0..a-1]dengan memperhatikan bahwa kedua bagiannya sama adan bbertukar. Panggilan tambahan a?bmenghitung jalur di mana langkah pertama menurun a, dan b?amenghitung jalur di mana langkah pertama berkurang b. Ini pada umumnya berbeda, dan mereka menambah a%b.
Penjumlahan dalam a?bjuga dapat ditulis sebagai daftar pemahaman a?b=sum[a%i|i<-[0..b-1]].
42 byte
0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Cobalah online!
Akhirnya, kita menyingkirkan %dan hanya menulis rekursi dalam hal ?dengan mengganti a%idengan a?i+i?apanggilan rekursif.
Basis kasus baru menyebabkan ini ?untuk memberikan output dua kali lipat dari ?pada versi 49-byte, karena dengan 0?0=1, kita akan melakukannya 0%0=0?0+0?0=2. Ini memungkinkan penggunaan define f n=n?ntanpa mengurangi separuh yang harus kita lakukan.