के साथ क्लोजर टेल रिकर्सन मैं खुद को क्लोजर सिखाने की कोशिश कर रहा हूं और मैं ऐसा करने के लिए प्राइम फैक्टर काटा और टीडीडी के सिद्धांतों का उपयोग कर रहा हूं।प्राइम फैक्टर
इस तरह Midje परीक्षण की एक श्रृंखला के माध्यम से:
(fact (primefactors 1) => (list))
(fact (primefactors 2) => (list 2))
(fact (primefactors 3) => (list 3))
(fact (primefactors 4) => (list 2 2))
मैं निम्नलिखित समारोह बनाने के लिए कर रहा था:
(defn primefactors
([n] (primefactors n 2))
([n candidate]
(cond (<= n 1) (list)
(= 0 (rem n candidate)) (conj (primefactors (/ n candidate)) candidate)
:else (primefactors n (inc candidate))
)
)
)
यह अच्छा काम करता है जब तक मैं इसे निम्नलिखित बढ़त मामले परीक्षण फेंक:
(fact (primefactors 1000001) => (list 101 9901))
मैं एक स्टैक ओवरफ़्लो त्रुटि के साथ समाप्त होता हूं। मुझे पता है कि मुझे इसे उचित रिकूर लूप में बदलने की ज़रूरत है, लेकिन मेरे द्वारा देखे जाने वाले सभी उदाहरण बहुत सरल हैं और केवल फोकस के रूप में काउंटर या न्यूमेरिकल वैरिएबल को इंगित करते हैं। मैं यह रिकर्सिव कैसे बना सकता हूं?
धन्यवाद!
वाह। यह पहली बार है जब मैं किसी को लिस्प लिखता हूं जो वास्तव में देता है) अपनी खुद की रेखाएं: पी –