_Ḟ1+¡
นี่เป็นโซลูชันวนซ้ำโดยไม่มีการติดตั้งภายใน มันใช้การจัดทำดัชนีเช่นเดียวกับสเป็คความท้าทาย
ลองออนไลน์!
พื้นหลัง
ให้fเป็นฟังก์ชันที่กำหนดไว้ในข้อมูลจำเพาะของความท้าทายและฟังก์ชันFของฟีโบนักชีตามปกติ (เช่นกับF (0) = 0 ) สำหรับจำนวนเต็มไม่เป็นลบnเรามีf (n) = F (n + 1) เมื่อ0 ≤ x <1ท้าทายข้อมูลจำเพาะกำหนดf (n + x)เป็นf (n) + (f (n + 1) - f (n)) x
เห็นได้ชัดว่านี้ก็ส่งผลกระทบต่อกรณีฐาน แต่ไม่สูตร recursive คือf (n) = f (n - 1) + f (n - 2)ถือเป็นมันจะสำหรับF ซึ่งหมายความว่าเราสามารถลดความซับซ้อนของคำนิยามสำหรับข้อโต้แย้งที่ไม่ใช่จำนวนเต็มจะได้ง่ายขึ้นf (n) = f (n) + f (n - 1) x
ดังที่คนอื่น ๆ ระบุไว้ในคำตอบความสัมพันธ์แบบวนซ้ำยังมีอาร์กิวเมนต์ที่ไม่ใช่จำนวนเต็ม สิ่งนี้พิสูจน์ได้ง่ายเช่น
ตั้งแต่f (0) = f (1) = 1 , Fในอย่างต่อเนื่องในช่วง[0, 1]และf (0 + x) = 1สำหรับทุกx นอกจากนี้f (-1) = F (0) = 0ดังนั้นf (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x กรณีเหล่านี้ฐานครอบคลุมใน[-1, 1)จึงร่วมกับสูตรเวียนเกิดพวกเขาเสร็จสิ้นความหมายของฉ
มันทำงานอย่างไร
เหมือนเมื่อก่อนให้n + xเป็นเพียงอาร์กิวเมนต์เดียวของโปรแกรม monadic ของเรา
¡
เป็นอย่างรวดเร็วซึ่งหมายความว่ามันกินเชื่อมโยงบางอย่างไปทางซ้ายและเปลี่ยนพวกเขาเข้าไปในQuickLink ¡
โดยเฉพาะการใช้ลิงค์หนึ่งหรือสอง
<F:monad|dyad><N:any>
เรียกลิงค์Nคืนค่าrและเรียกใช้Fรวมrครั้ง
<nilad|missing><F:monad|dyad>
ชุดrกับอาร์กิวเมนต์สุดท้ายบรรทัดคำสั่ง (หรือการป้อนข้อมูลจาก STDIN ในกรณีที่ไม่มีของพวกเขา) และดำเนินการFรวมRครั้ง
เนื่องจาก1
เป็น nilad (ลิงก์ที่ไม่มีอาร์กิวเมนต์) จึงใช้กรณีที่สองและ+¡
จะดำเนินการ+
nครั้ง (อาร์กิวเมนต์ที่ไม่ใช่จำนวนเต็มถูกปัดเศษลง) หลังจากการเรียกแต่ละครั้ง+
อาร์กิวเมนต์ด้านซ้ายของ quicklink จะถูกแทนที่ด้วยค่าส่งคืนและอาร์กิวเมนต์ด้านขวาด้วยค่าก่อนหน้าของอาร์กิวเมนต์ด้านซ้าย
สำหรับโปรแกรมทั้งหมดให้Ḟ
ทำการอินพุต, ให้ค่าn ; จากนั้น_
ลบผลลัพธ์จากอินพุตป้อนค่า ** x ซึ่งกลายเป็นค่าส่งคืน
1+¡
จากนั้นเรียก+¡
- ตามที่อธิบายไว้ก่อน - ด้วยอาร์กิวเมนต์ซ้าย1 = f (0 + x)และอาร์กิวเมนต์ขวาx = f (-1 + x)ซึ่งคำนวณเอาต์พุตที่ต้องการ