คำถามติดแท็ก recursion

การเรียกซ้ำคือการเรียกใช้ฟังก์ชันซึ่งฟังก์ชันเรียกใช้ตัวเอง ฟังก์ชั่นดังกล่าวเรียกว่าฟังก์ชั่นซ้ำ การเรียกใช้โครงสร้างซ้ำเป็นวิธีการแก้ปัญหาโดยวิธีการแก้ไขปัญหาขึ้นอยู่กับวิธีแก้ไขปัญหาที่เล็กกว่าของปัญหาเดียวกัน

3
Python: ใช้อัลกอริทึมแบบเรียกซ้ำเป็นตัวสร้าง
เมื่อเร็ว ๆ นี้ฉันได้เขียนฟังก์ชันเพื่อสร้างลำดับบางอย่างโดยมีข้อ จำกัด ที่ไม่สำคัญ ปัญหามาพร้อมกับวิธีแก้ซ้ำตามธรรมชาติ ตอนนี้มันเกิดขึ้นว่าแม้จะมีอินพุตที่ค่อนข้างเล็ก แต่ลำดับก็มีหลายพันดังนั้นฉันจึงต้องการใช้อัลกอริทึมของฉันเป็นตัวสร้างแทนที่จะใช้มันเพื่อเติมเต็มรายการด้วยลำดับทั้งหมด นี่คือตัวอย่าง สมมติว่าเราต้องการคำนวณการเรียงสับเปลี่ยนทั้งหมดของสตริงด้วยฟังก์ชันวนซ้ำ อัลกอริทึมไร้เดียงสาต่อไปนี้ใช้อาร์กิวเมนต์พิเศษ 'ที่เก็บข้อมูล' และต่อท้ายการเปลี่ยนแปลงเมื่อใดก็ตามที่พบ: def getPermutations(string, storage, prefix=""): if len(string) == 1: storage.append(prefix + string) # <----- else: for i in range(len(string)): getPermutations(string[:i]+string[i+1:], storage, prefix+string[i]) storage = [] getPermutations("abcd", storage) for permutation in storage: print permutation (โปรดอย่าสนใจเกี่ยวกับความไม่มีประสิทธิภาพนี่เป็นเพียงตัวอย่างเท่านั้น) ตอนนี้ฉันต้องการเปลี่ยนฟังก์ชั่นของฉันให้เป็นเครื่องกำเนิดไฟฟ้ากล่าวคือให้การเปลี่ยนแปลงแทนที่จะผนวกเข้ากับรายการพื้นที่เก็บข้อมูล: def getPermutations(string, prefix=""): …


30
ตัวอย่างการเรียกซ้ำในโลกแห่งความเป็นจริง [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน7 ปีที่ผ่านมา ปรับปรุงคำถามนี้ อะไรคือปัญหาในโลกแห่งความจริงที่วิธีการวนซ้ำเป็นวิธีแก้ปัญหาที่เป็นธรรมชาตินอกเหนือจากการค้นหาในเชิงลึกก่อน (DFS) (ผมไม่ได้พิจารณาหอคอยฮานอย , จำนวนฟีโบนักชีหรือปัญหาที่เกิดขึ้นจริงในโลกแฟกทอ. พวกเขาเป็นบิต contrived ในใจของฉัน.)
98 recursion 

1
Paramorphisms คืออะไร?
เมื่ออ่านบทความคลาสสิกนี้ฉันติดอยู่กับพารามอร์ฟิสม์ น่าเสียดายที่ส่วนนี้ค่อนข้างบางและหน้า Wikipedia ไม่ได้พูดอะไรเลย การแปล Haskell ของฉันคือ: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = f x xs (h xs) แต่ฉันไม่เอะใจนั่น - ฉันไม่มีสัญชาตญาณใด ๆ สำหรับลายเซ็นประเภทหรือผลลัพธ์ที่ต้องการ พารามอร์ฟิสซึมคืออะไรและมีตัวอย่างใดบ้างที่เป็นประโยชน์ในการดำเนินการ ใช่ฉันเคยเห็นคำถามเหล่านี้ แต่ไม่ครอบคลุมถึงพารามอร์ฟิสโดยตรงและชี้ไปที่แหล่งข้อมูลที่อาจเป็นประโยชน์ในการอ้างอิงเท่านั้น แต่ไม่ใช่เป็นสื่อการเรียนรู้

5
เรียกใช้ฟังก์ชันจาวาสคริปต์ซ้ำ
ฉันสามารถสร้างฟังก์ชันวนซ้ำในตัวแปรดังนี้: /* Count down to 0 recursively. */ var functionHolder = function (counter) { output(counter); if (counter > 0) { functionHolder(counter-1); } } ด้วยวิธีนี้จะส่งออกfunctionHolder(3); 3 2 1 0สมมติว่าฉันทำสิ่งต่อไปนี้: var copyFunction = functionHolder; copyFunction(3);จะแสดงผลลัพธ์3 2 1 0ตามด้านบน ถ้าฉันเปลี่ยนแล้วfunctionHolderดังนี้: functionHolder = function(whatever) { output("Stop counting!"); จากนั้นfunctionHolder(3);จะให้Stop counting!ตามที่คาดไว้ copyFunction(3);ตอนนี้ให้3 Stop counting!ตามที่อ้างถึงfunctionHolderไม่ใช่ฟังก์ชัน (ที่ตัวเองชี้ไป) สิ่งนี้อาจเป็นที่พึงปรารถนาในบางสถานการณ์ …


10
ค้นหาคีย์ที่เกิดขึ้นทั้งหมดในพจนานุกรมและรายการที่ซ้อนกัน
ฉันมีพจนานุกรมแบบนี้: { "id" : "abcde", "key1" : "blah", "key2" : "blah blah", "nestedlist" : [ { "id" : "qwerty", "nestednestedlist" : [ { "id" : "xyz", "keyA" : "blah blah blah" }, { "id" : "fghi", "keyZ" : "blah blah blah" }], "anothernestednestedlist" : [ { "id" : "asdf", "keyQ" …

6
การสืบทอดและการเรียกซ้ำ
สมมติว่าเรามีคลาสต่อไปนี้: class A { void recursive(int i) { System.out.println("A.recursive(" + i + ")"); if (i > 0) { recursive(i - 1); } } } class B extends A { void recursive(int i) { System.out.println("B.recursive(" + i + ")"); super.recursive(i + 1); } } ตอนนี้ให้โทรrecursiveในคลาส A: public class Demo { public …

1
Python: เกินความลึกของการเรียกซ้ำสูงสุด
ฉันมีรหัสการเรียกซ้ำต่อไปนี้ในแต่ละโหนดฉันเรียกแบบสอบถาม sql เพื่อให้โหนดเป็นของโหนดหลัก นี่คือข้อผิดพลาด: Exception RuntimeError: 'maximum recursion depth exceeded' in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879768c>> ignored RuntimeError: maximum recursion depth exceeded while calling a Python object Exception AttributeError: "'DictCursor' object has no attribute 'connection'" in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879776c>> ignored วิธีที่ฉันเรียกเพื่อรับผลลัพธ์ sql: …

9
ติดตามจำนวนครั้งที่เรียกใช้ฟังก์ชันเรียกซ้ำ
function singleDigit(num) { let counter = 0 let number = [...num + ''].map(Number).reduce((x, y) => {return x * y}) if(number <= 9){ console.log(number) }else{ console.log(number) return singleDigit(number), counter += 1 } } singleDigit(39) เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล โค้ดด้านบนใช้จำนวนเต็มและย่อให้เป็นตัวเลขเดียวโดยคูณด้วยตัวเลขของตัวเอง ตัวอย่างคือ 39 3 x 9 = 27. 2 x 7 = 14. 1 x 4 …

7
จะเขียน 2 ** n - 1 เป็นฟังก์ชั่นวนซ้ำได้อย่างไร?
ฉันต้องการฟังก์ชั่นที่ใช้เวลา n และผลตอบแทน2 n - 1 ฟังดูง่ายพอ แต่ฟังก์ชั่นจะต้องเรียกซ้ำ จนถึงตอนนี้ฉันมีเพียง 2 n : def required_steps(n): if n == 0: return 1 return 2 * req_steps(n-1) สถานะการออกกำลังกาย: "คุณสามารถสันนิษฐานได้ว่าพารามิเตอร์ n เป็นจำนวนเต็มบวกเสมอและมากกว่า 0"
49 python  recursion 

2
การเรียกเมธอดแบบเรียกซ้ำทำให้เกิด StackOverFlowError ใน kotlin แต่ไม่ใช่ใน java
ฉันมีสองรหัสที่เหมือนกันเกือบทั้งใน java และ kotlin Java: public void reverseString(char[] s) { helper(s, 0, s.length - 1); } public void helper(char[] s, int left, int right) { if (left >= right) return; char tmp = s[left]; s[left++] = s[right]; s[right--] = tmp; helper(s, left, right); } Kotlin: fun reverseString(s: CharArray): Unit { …
14 java  recursion  kotlin 

4
การคำนวณรูตที่ซ้อนใน C
ฉันถูกขอให้คำนวณนิพจน์รูทที่ซ้อนกันต่อไปนี้โดยใช้การเรียกซ้ำเท่านั้น ฉันเขียนโค้ดด้านล่างที่ใช้งานได้ แต่พวกเขาอนุญาตให้เราใช้เพียงฟังก์ชั่นเดียวและ 1 อินพุตnเพื่อวัตถุประสงค์และไม่ใช่ 2 อย่างที่ฉันใช้ ใครสามารถช่วยฉันแปลงรหัสนี้เป็นฟังก์ชั่นเดียวที่จะคำนวณการแสดงออก? ลาดเทใช้ห้องสมุดใด ๆ <math.h>ยกเว้นจากฟังก์ชั่น เอาต์พุตสำหรับ n = 10: 1.757932 double rec_sqrt_series(int n, int m) { if (n <= 0) return 0; if (m > n) return 0; return sqrt(m + rec_sqrt_series(n, m + 1)); } double helper(int n) { return rec_sqrt_series(n, 1); }
9 c  recursion  sqrt 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.