Jöle , 5 bayt
_Ḟ1+¡
Bu yerleşik olmayan yinelemeli bir çözümdür. Meydan okuma özelliğiyle aynı indekslemeyi kullanır.
Çevrimiçi deneyin!
Arka fon
Let f meydan spec ve tanımlanmış fonksiyonu F (yani, her zaman olduğu gibi tanımlandığı Fibonacci fonksiyonu F (0) = 0 ). Negatif olmayan bir tamsayı için n , elimizdeki f (n) = F (n + 1) . Zaman 0 ≤ x <1 , meydan spektrumu tanımlar f (n + x) olarak f (n) + (f (n + 1) - f (n)), X .
Açıkçası, bu sadece temel vakaları etkiler, ancak özyinelemeli formül değil, yani f (n) = f (n - 1) + f (n - 2) , F için olduğu gibi kalır . Bu, tamsayı olmayan argümanların tanımını daha kolay f (n) = f (n) + f (n - 1) x ile basitleştirebileceğimiz anlamına gelir .
Diğerlerinin cevaplarında belirttiği gibi, yinelemeli ilişki tamsayı olmayan argümanlar için de geçerlidir. Bu kolayca doğrulanabilir, çünkü
Yana f (0) = f (1) = 1 , m aralığında sabiti [0, 1] ve f (0 + x) = 1 için tüm x . Ayrıca, f (-1) = F (0) = 0 , yani f (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x . Bu temel durumlar [-1, 1) 'i kapsar , bu nedenle özyinelemeli formülle birlikte f tanımını tamamlarlar .
Nasıl çalışır
Daha önce olduğu gibi, n + x , monadic programımızın tek argümanı olsun.
¡
Bir olan hızlı bir içine sol ve dönüşler onlara bazı bağlantılar tüketir yani Quicklink . ¡
özellikle bir veya iki bağlantı tüketir.
<F:monad|dyad><N:any>
r bağlantısını döndüren N bağlantısını çağırır ve F'yi toplam r kez çalıştırır.
<nilad|missing><F:monad|dyad>
r'yi son komut satırı argümanına (veya yokluğunda STDIN'den gelen bir girişe) ayarlar ve F'yi toplam r kez yürütür .
Yana 1
bir nilad (bağımsız değişkeni olmayan bir bağlantı), ikinci durumda geçerlidir ve +¡
çalıştırır +
n kat (tam sayı olmayan bir argüman yuvarlak aşağı). Her çağrıdan sonra +
, hızlı bağlantının sol argümanı dönüş değeriyle, sağ argüman ise sol argümanın önceki değeriyle değiştirilir.
Tüm programa gelince Ḟ
, giriş katlanır, n verir ; daha sonra _
sonucu girişten çıkarın, döndürme değeri olan ** x verir.
1+¡
sonra +¡
- daha önce anlatıldığı gibi - istenen çıktıyı hesaplayan sol argüman 1 = f (0 + x) ve sağ argüman x = f (-1 + x) ile çağırır .