คุณสามารถเปลี่ยนฟังก์ชั่นวนซ้ำเป็นฟังก์ชันซ้ำได้หรือไม่? ใช่แน่นอนและการทำวิทยานิพนธ์ของทัวริสต์ทัวริสพิสูจน์ได้ถ้าความจำทำหน้าที่ ในแง่ของการวางมันระบุว่าสิ่งที่คำนวณได้โดยฟังก์ชั่นซ้ำคือคำนวณโดยแบบจำลองซ้ำ (เช่นเครื่องทัวริง) และในทางกลับกัน วิทยานิพนธ์ไม่ได้บอกคุณอย่างชัดเจนถึงวิธีการแปลง แต่ก็บอกว่าเป็นไปได้แน่นอน
ในหลายกรณีการแปลงฟังก์ชั่นวนซ้ำเป็นเรื่องง่าย Knuth เสนอเทคนิคต่าง ๆ ใน "ศิลปะแห่งการเขียนโปรแกรมคอมพิวเตอร์" และบ่อยครั้งที่สิ่งที่คำนวณซ้ำสามารถคำนวณได้ด้วยวิธีการที่แตกต่างกันโดยสิ้นเชิงในเวลาและพื้นที่ที่น้อยลง ตัวอย่างคลาสสิกของสิ่งนี้คือหมายเลขฟีโบนักชีหรือลำดับของมัน คุณได้พบปัญหานี้อย่างแน่นอนในแผนปริญญาของคุณ
ในอีกด้านหนึ่งของเหรียญนี้เราสามารถจินตนาการถึงระบบการเขียนโปรแกรมขั้นสูงเพื่อรักษานิยามการเรียกซ้ำของสูตรเพื่อเชิญชวนให้บันทึกผลลัพธ์ก่อนหน้าดังนั้นจึงให้ประโยชน์ด้านความเร็วโดยไม่ต้องวุ่นวายกับการบอกคอมพิวเตอร์ว่าขั้นตอนใด ติดตามการคำนวณสูตรด้วยคำจำกัดความแบบเรียกซ้ำ Dijkstra เกือบจะจินตนาการระบบดังกล่าว เขาใช้เวลานานในการพยายามแยกการใช้งานจากความหมายของภาษาโปรแกรม จากนั้นอีกครั้งภาษาการเขียนโปรแกรมแบบไม่ จำกัด และหลายตัวประมวลผลของเขาอยู่ในลีกเหนือโปรแกรมเมอร์มืออาชีพฝึก
ในการวิเคราะห์ขั้นสุดท้ายฟังก์ชั่นจำนวนมากนั้นง่ายต่อการเข้าใจอ่านและเขียนในแบบเรียกซ้ำ หากไม่มีเหตุผลที่น่าสนใจคุณอาจไม่ควรแปลงฟังก์ชันเหล่านี้ด้วยตนเองเป็นอัลกอริทึมการวนซ้ำอย่างชัดเจน คอมพิวเตอร์ของคุณจะจัดการกับงานนั้นอย่างถูกต้อง
ฉันเห็นเหตุผลที่น่าสนใจหนึ่งข้อ สมมติว่าคุณมีระบบต้นแบบในภาษาระดับสูงพิเศษเช่น [ donning asbestos underwear ] Scheme, Lisp, Haskell, OCaml, Perl หรือ Pascal สมมติว่าเงื่อนไขเป็นเช่นนั้นคุณต้องมีการนำไปใช้ใน C หรือ Java (อาจเป็นเรื่องการเมือง) จากนั้นคุณอาจมีฟังก์ชั่นบางอย่างที่เขียนซ้ำ ๆ แต่ที่แปลตามตัวอักษรแล้วจะระเบิดระบบรันไทม์ของคุณ ยกตัวอย่างเช่น infinite tail recursion เป็นไปได้ใน Scheme แต่สำนวนเดียวกันทำให้เกิดปัญหาสำหรับสภาพแวดล้อม C ที่มีอยู่ อีกตัวอย่างหนึ่งคือการใช้ฟังก์ชั่นที่ซ้อนกันของคำศัพท์และขอบเขตคงที่ซึ่ง Pascal รองรับ แต่ C ไม่ได้
ในสถานการณ์เหล่านี้คุณอาจพยายามเอาชนะการต่อต้านทางการเมืองเป็นภาษาดั้งเดิม คุณอาจพบว่าตัวเองปรับใช้ Lisp ไม่ดีเช่นเดียวกับในกฎหมายที่สิบของ Greenspun (ลิ้นที่แก้ม) หรือคุณอาจพบวิธีแก้ไขปัญหาที่แตกต่างอย่างสิ้นเชิง แต่ในกรณีใด ๆ ก็มีวิธี