में एक रिकर्सिव फाइबोनैकी फ़ंक्शन मैं क्लोजर के लिए एक नवागंतुक हूं जो देखना चाहता था कि सभी झगड़े क्या हैं। इसके लिए एक महसूस करने का सबसे अच्छा तरीका यह है कि कुछ सरल कोड लिखना है, मैंने सोचा कि मैं एक फाइबोनैकी समारोह से शुरू करूंगा।क्लोजर
मेरा पहला प्रयास था:
(defn fib [x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x))
इस मैं [0 1] जब फ़ंक्शन को कॉल के साथ एक्स बीज की जरूरत का उपयोग करें। मेरा सवाल यह है कि, इसे एक अलग फ़ंक्शन में लपेटने के बिना, क्या एक ऐसा फ़ंक्शन लिखना संभव है जो केवल तत्वों की संख्या को वापस ले लेता है?
कुछ पढ़ने करने से चारों ओर मुझे एक ही funcionality को प्राप्त करने के कुछ बेहतर तरीके को जन्म दिया:
(defn fib2 [n]
(loop [ x [0 1]]
(if (< (count x) n)
(recur (conj x (+ (last x) (nth x (- (count x) 2)))))
x)))
और
(defn fib3 [n]
(take n
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))))
वैसे भी, किसी और चीज से व्यायाम के लिए अधिक, किसी को भी यह कर सकते हैं पूरी तरह से रिकर्सिव फाइबोनैकी फ़ंक्शन के बेहतर संस्करण के साथ मेरी सहायता करें? या शायद एक बेहतर/अलग समारोह साझा करें?
(defn fib
([n]
(fib [0 1] n))
([x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x)))
समारोह परिभाषा इस प्रकार कहा जाता है बहु arity समारोह परिभाषा:
fib3 इन –