Jeli , 5 byte
_Ḟ1+¡
Ini adalah solusi berulang tanpa built-in. Ini menggunakan pengindeksan yang sama dengan spec tantangan.
Cobalah online!
Latar Belakang
Biarkan f menjadi fungsi yang didefinisikan dalam spec tantangan dan F fungsi Fibonacci didefinisikan seperti biasa (yaitu, dengan F (0) = 0 ). Untuk bilangan bulat n -negatif , kita memiliki f (n) = F (n + 1) . Ketika 0 ≤ x <1 , spec tantangan mendefinisikan f (n + x) sebagai f (n) + (f (n + 1) - f (n)) x .
Jelas, ini hanya mempengaruhi kasus dasar, tetapi tidak formula rekursif, yaitu, f (n) = f (n - 1) + f (n - 2) memegang karena akan untuk F . Ini berarti kita dapat menyederhanakan definisi untuk argumen non-integer menjadi lebih mudah f (n) = f (n) + f (n - 1) x .
Seperti yang telah dicatat orang lain dalam jawaban mereka, hubungan rekursif juga berlaku untuk argumen non-integer. Ini mudah diverifikasi, karena
Karena f (0) = f (1) = 1 , f dalam konstanta dalam interval [0, 1] dan f (0 + x) = 1 untuk semua x . Selanjutnya, f (-1) = F (0) = 0 , jadi f (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x . Kasing dasar ini mencakup [-1, 1) , jadi bersama dengan rumus rekursif, mereka melengkapi definisi f .
Bagaimana itu bekerja
Seperti sebelumnya, misalkan n + x menjadi satu-satunya argumen dari program monadik kami.
¡
itu cepat , artinya ia mengkonsumsi beberapa tautan di sebelah kirinya dan mengubahnya menjadi tautan cepat . ¡
khususnya mengkonsumsi satu atau dua tautan.
<F:monad|dyad><N:any>
memanggil tautan N , mengembalikan r , dan mengeksekusi F total r kali.
<nilad|missing><F:monad|dyad>
set r ke argumen baris perintah terakhir (atau input dari STDIN jika tidak ada) dan mengeksekusi F total r kali.
Karena 1
adalah nilad (tautan tanpa argumen), kasus kedua berlaku, dan +¡
akan dieksekusi +
n kali (argumen non-integer dibulatkan ke bawah). Setelah setiap panggilan ke+
, argumen kiri quicklink diganti dengan nilai balik, dan argumen kanan dengan nilai sebelumnya dari argumen kiri.
Sedangkan untuk seluruh program, Ḟ
lantai input, menghasilkan n ; kemudian _
kurangi hasil dari input, menghasilkan ** x, yang menjadi nilai pengembalian.
1+¡
kemudian memanggil +¡
- seperti yang dijelaskan sebelumnya - dengan argumen kiri 1 = f (0 + x) dan argumen kanan x = f (-1 + x) , yang menghitung output yang diinginkan.