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

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

9
บันทึก (n!) = Θ (n ·บันทึก (n)) หรือไม่
ผมจะแสดงให้เห็นว่าการเข้าสู่ระบบ ( n !) = Θ ( n ·เข้าสู่ระบบ ( n )) คำแนะนำที่ได้รับว่าผมควรจะแสดงผูกไว้บนที่มีn nและแสดงขอบเขตล่างด้วย( n / 2) ( n / 2) นี่ดูเหมือนจะไม่ง่ายสำหรับฉัน ทำไมเป็นเช่นนั้น แน่นอนฉันสามารถดูวิธีการแปลงn nเพื่อn ·เข้าสู่ระบบ ( n ) (เช่นเข้าสู่ระบบทั้งสองข้างของสมการ) แต่ที่เป็นชนิดของการทำงานย้อนหลัง อะไรคือแนวทางที่ถูกต้องในการแก้ไขปัญหานี้ ฉันควรจะวาดต้นไม้เรียกซ้ำหรือไม่? ไม่มีอะไรซ้ำซากเกี่ยวกับเรื่องนี้ดังนั้นจึงไม่น่าจะเป็นวิธีการที่น่าสนใจ ..

6
Python ปรับหางแบบวนซ้ำให้เหมาะสมหรือไม่?
ฉันมีรหัสต่อไปนี้ซึ่งล้มเหลวด้วยข้อผิดพลาดต่อไปนี้: RuntimeError: เกินความลึกการเรียกซ้ำสูงสุด ฉันพยายามเขียนสิ่งนี้เพื่ออนุญาตการปรับให้เหมาะสมแบบเรียกซ้ำหาง (TCO) ฉันเชื่อว่ารหัสนี้ควรจะประสบความสำเร็จหาก TCO เกิดขึ้น def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n) print(trisum(1000, 0)) ฉันควรสรุปได้หรือไม่ว่า Python ไม่ได้ทำ TCO ประเภทใดหรือฉันต้องกำหนดมันให้แตกต่างกันหรือไม่?

7
อะไรคือฟังก์ชั่น reentrant
ส่วนใหญ่ ของ ครั้งความหมายของ reentrance ที่ยกมาจากวิกิพีเดีย : โปรแกรมคอมพิวเตอร์หรือรูทีนถูกอธิบายว่าเป็น reentrant หากสามารถ เรียกได้อย่างปลอดภัยอีกครั้งก่อนที่การร้องขอก่อนหน้านี้จะเสร็จสมบูรณ์ (เช่นสามารถดำเนินการได้อย่างปลอดภัยพร้อมกัน) ในการเป็น reentrant โปรแกรมคอมพิวเตอร์หรือชุดคำสั่ง: ต้องไม่เก็บข้อมูลที่ไม่คงที่ (หรือทั่วโลก) ต้องไม่ส่งคืนที่อยู่เป็นข้อมูลคงที่ (หรือทั่วโลก) ที่ไม่ใช่ค่าคงที่ จะต้องทำงานเฉพาะกับข้อมูลที่ผู้โทรแจ้งมาเท่านั้น ต้องไม่พึ่งพาการล็อกกับรีซอร์สเดี่ยว ต้องไม่แก้ไขโค้ดของตัวเอง (ยกเว้นว่าจะดำเนินการในพื้นที่จัดเก็บเธรดเฉพาะของตนเอง) ต้องไม่เรียกโปรแกรมคอมพิวเตอร์หรือรูทีนที่ไม่ใช่ reentrant เป็นวิธีการที่ปลอดภัยที่กำหนดไว้? หากโปรแกรมสามารถดำเนินการได้อย่างปลอดภัยพร้อมกันก็หมายความว่ามันเป็น reentrant? อะไรคือเธรดทั่วไประหว่างจุดทั้งหกที่กล่าวถึงว่าฉันควรจำไว้ในขณะที่ตรวจสอบรหัสของฉันสำหรับความสามารถ reentrant นอกจากนี้ ฟังก์ชั่นการเรียกซ้ำทั้งหมดเป็น reentrant หรือไม่ ฟังก์ชั่น thread-safe ทั้งหมดถูก reentrant หรือไม่ ฟังก์ชันการเรียกซ้ำทั้งหมดและแบบปลอดภัยต่อการส่งข้อความ reentrant ทั้งหมดหรือไม่ ในขณะที่เขียนคำถามนี้สิ่งหนึ่งที่อยู่ในใจ: เงื่อนไขเช่นreentranceและความปลอดภัยแน่นอนที่ทุกคนคือพวกเขามีคำจำกัดความที่เป็นรูปธรรมหรือไม่? สำหรับถ้าไม่ใช่คำถามนี้ไม่มีความหมายมากนัก

6
ฟังก์ชั่น PHP แบบเรียกซ้ำแบบไม่ระบุชื่อ
เป็นไปได้ไหมที่มีฟังก์ชัน PHP ที่เรียกซ้ำและไม่ระบุชื่อ? นี่คือความพยายามของฉันในการทำให้มันใช้งานได้ แต่มันไม่ผ่านชื่อฟังก์ชั่น $factorial = function( $n ) use ( $factorial ) { if( $n <= 1 ) return 1; return $factorial( $n - 1 ) * $n; }; print $factorial( 5 ); ฉันรู้ด้วยเช่นกันว่านี่เป็นวิธีที่ไม่ดีที่จะนำแฟคทอเรียลมาเป็นตัวอย่างเท่านั้น

4
วิธีสร้างไดเรกทอรีย่อยที่ไม่มีอยู่ซ้ำโดยใช้ Bash
ฉันกำลังสร้างสคริปต์สำรองอย่างรวดเร็วที่จะถ่ายโอนฐานข้อมูลบางส่วนไปยังโครงสร้างไดเรกทอรีที่ดี / เรียบร้อยและฉันรู้ว่าฉันต้องทดสอบเพื่อให้แน่ใจว่าไดเรกทอรีมีอยู่ก่อนที่ฉันจะสร้างพวกเขา รหัสที่ฉันใช้งานได้ แต่ดูเหมือนว่ามีวิธีที่ดีกว่าที่จะทำ ข้อเสนอแนะใด ๆ [ -d "$BACKUP_DIR" ] || mkdir "$BACKUP_DIR" [ -d "$BACKUP_DIR/$client" ] || mkdir "$BACKUP_DIR/$client" [ -d "$BACKUP_DIR/$client/$year" ] || mkdir "$BACKUP_DIR/$client/$year" [ -d "$BACKUP_DIR/$client/$year/$month" ] || mkdir "$BACKUP_DIR/$client/$year/$month" [ -d "$BACKUP_DIR/$client/$year/$month/$day" ] || mkdir "$BACKUP_DIR/$client/$year/$month/$day"

17
การเรียกซ้ำทุกครั้งสามารถเปลี่ยนเป็นการทำซ้ำได้หรือไม่
ด้าย Redditนำขึ้นคำถามที่น่าสนใจเห็นได้ชัดว่า: ฟังก์ชันเรียกซ้ำแบบหางสามารถแปลงเป็นฟังก์ชั่นวนซ้ำได้เล็กน้อย ส่วนอื่นสามารถเปลี่ยนได้โดยใช้สแต็กที่ชัดเจน การเรียกซ้ำทุกครั้งสามารถเปลี่ยนเป็นการวนซ้ำได้หรือไม่ ตัวอย่าง (ตัวนับ?) ในโพสต์คือคู่: (define (num-ways x y) (case ((= x 0) 1) ((= y 0) 1) (num-ways2 x y) )) (define (num-ways2 x y) (+ (num-ways (- x 1) y) (num-ways x (- y 1))

9
การเรียกซ้ำในคำสั่งเชิงมุม
มีคำถามเกี่ยวกับการทำมุมคำสั่งแบบเรียกซ้ำซึ่งเป็นที่นิยมซึ่งมีทั้งหมดหนึ่งคำตอบต่อไปนี้: 'คอมไพล์' HTML แบบเพิ่มหน่วยด้วยตนเองตามสถานะขอบเขตรันไทม์ ตัวอย่าง 1 [ stackoverflow ] ตัวอย่างที่ 2 [ หน้าเชิงมุม jsfiddles ] อย่าใช้คำสั่งเลย แต่เป็นเทมเพลต <script> ที่อ้างถึงตัวมันเอง ตัวอย่าง 1 [ กลุ่ม google ] คนแรกมีปัญหาที่คุณไม่สามารถลบรหัสที่รวบรวมไว้ก่อนหน้านี้เว้นแต่ว่าคุณจะจัดการกระบวนการรวบรวมด้วยตนเองอย่างละเอียด แนวทางที่สองมีปัญหาว่า ... ไม่ใช่คำสั่งและขาดความสามารถอันทรงพลัง แต่ยิ่งเร่งด่วนมันไม่สามารถกำหนดพารามิเตอร์แบบเดียวกับที่คำสั่งนั้นสามารถทำได้ มันเพิ่งถูกผูกไว้กับอินสแตนซ์ตัวควบคุมใหม่ ฉันได้เล่นกับการทำงานด้วยตนเองangular.bootstrapหรือ@compile()ในฟังก์ชั่นการเชื่อมโยง แต่นั่นทำให้ฉันมีปัญหาในการติดตามองค์ประกอบด้วยตนเองเพื่อลบและเพิ่ม มีวิธีที่ดีที่จะมีรูปแบบแบบเรียกซ้ำพารามิเตอร์ที่จัดการการเพิ่ม / ลบองค์ประกอบเพื่อสะท้อนสถานะ runtime หรือไม่? กล่าวคือต้นไม้ที่มีปุ่มเพิ่ม / ลบโหนดและฟิลด์อินพุตบางฟิลด์ที่ค่าถูกส่งผ่านโหนดชายด์ของโหนด อาจเป็นการรวมกันของแนวทางที่สองเข้ากับขอบเขตที่ถูกล่ามโซ่ (แต่ฉันไม่รู้ว่าจะทำอย่างไร)

30
Java ลำดับ Fibonacci แบบเรียกซ้ำ
โปรดอธิบายรหัสง่าย ๆ นี้: public int fibonacci(int n) { if(n == 0) return 0; else if(n == 1) return 1; else return fibonacci(n - 1) + fibonacci(n - 2); } ฉันสับสนกับบรรทัดสุดท้ายโดยเฉพาะอย่างยิ่งเพราะถ้าเช่น n = 5 แล้ว fibonacci (4) + fibonacci (3) จะถูกเรียกและต่อไป แต่ฉันไม่เข้าใจว่าอัลกอริทึมนี้คำนวณค่าที่ดัชนี 5 โดยวิธีนี้ได้อย่างไร วิธี. โปรดอธิบายด้วยรายละเอียดมากมาย!

7
ผลกระทบของ foldr กับ foldl (หรือ foldl ')
ประการแรกโลกแห่งความจริง Haskellซึ่งฉันอ่านกล่าวว่าจะไม่เคยใช้และแทนที่จะใช้foldl foldl'ดังนั้นฉันจึงเชื่อมั่น แต่ฉันมีหมอกในเมื่อจะใช้กับfoldr foldl'แม้ว่าฉันจะสามารถเห็นโครงสร้างของวิธีการทำงานของพวกเขาที่แตกต่างออกไปตรงหน้าฉันก็โง่เกินกว่าที่จะเข้าใจว่า "ซึ่งดีกว่า" ฉันคิดว่ามันดูเหมือนว่าฉันไม่ควรทำเรื่องสำคัญซึ่งใช้เพราะพวกเขาทั้งคู่ให้คำตอบเดียวกัน (ไม่ใช่พวกเขา?) ในความเป็นจริงประสบการณ์ก่อนหน้าของฉันกับโครงสร้างนี้มาจาก Ruby injectand Clojure's reduceซึ่งดูเหมือนจะไม่มีเวอร์ชั่น "ซ้าย" และ "ถูกต้อง" (คำถามด้านข้าง: พวกเขาใช้เวอร์ชันใด) ข้อมูลเชิงลึกใด ๆ ที่สามารถช่วยคัดสรรที่ท้าทายเช่นฉันจะได้รับการชื่นชมมาก!

15
วิธีค้นหาโดย key => ค่าในอาร์เรย์หลายมิติใน PHP
มีวิธีที่รวดเร็วในการรับ subarrays ทั้งหมดที่พบคู่ค่าคีย์ในอาร์เรย์หลายมิติหรือไม่? ฉันไม่สามารถบอกได้ว่าอาเรย์นั้นจะลึกแค่ไหน อาร์เรย์ตัวอย่างง่าย ๆ : $arr = array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>2,name=>"cat 2"), 2 => array(id=>3,name=>"cat 1") ); เมื่อฉันค้นหา key = name and value = "cat 1" ฟังก์ชั่นควรกลับมา: array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>3,name=>"cat 1") ); ฉันเดาว่าฟังก์ชั่นจะต้องเรียกซ้ำเพื่อลงไปสู่ระดับที่ลึกที่สุด
147 php  arrays  search  recursion 

22
วิธีแก้ปัญหาสำหรับ“ ข้อผิดพลาดร้ายแรง: ถึงระดับการซ้อนฟังก์ชันสูงสุดถึง 100 การยกเลิก!” ใน PHP
ฉันได้สร้างฟังก์ชันที่ค้นหา URL ทั้งหมดในไฟล์ html และทำซ้ำกระบวนการเดียวกันสำหรับเนื้อหา html แต่ละรายการที่เชื่อมโยงกับ URL ที่ค้นพบ ฟังก์ชั่นนี้เกิดซ้ำและสามารถทำงานต่อไปได้ไม่รู้จบ อย่างไรก็ตามฉันได้ จำกัด การเรียกซ้ำโดยตั้งค่าตัวแปรส่วนกลางซึ่งทำให้การเรียกซ้ำหยุดหลังจากเรียกซ้ำ 100 ครั้ง อย่างไรก็ตาม php ส่งคืนข้อผิดพลาดนี้: ข้อผิดพลาดร้ายแรง: ฟังก์ชันการซ้อนสูงสุดถึง '100' ถึงยกเลิกแล้ว! ใน D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php ที่บรรทัด 1355 ฉันพบวิธีแก้ปัญหาที่นี่: การเพิ่มขีด จำกัด การเรียกฟังก์ชันซ้อนแต่นี่ไม่ได้ผลในกรณีของฉัน ฉันอ้างอิงหนึ่งในคำตอบจากลิงค์ที่กล่าวถึงข้างต้น โปรดพิจารณาด้วย "คุณมี Zend, IonCube หรือ xDebug ติดตั้งอยู่หรือไม่ถ้าใช่นั่นอาจเป็นที่ที่คุณได้รับข้อผิดพลาดนี้ ฉันวิ่งเข้าไปในนี้ไม่กี่ปีที่ผ่านมาและในที่สุดก็กลายเป็น Zend …
137 recursion  xdebug  php 

9
นิยามโครงสร้างอ้างอิงตนเอง?
ฉันไม่ได้เขียน C มานานมากแล้วดังนั้นฉันจึงไม่แน่ใจว่าฉันควรจะทำสิ่งที่เรียกซ้ำเหล่านี้อย่างไร ... ฉันต้องการให้แต่ละเซลล์มีเซลล์อื่น แต่ฉันได้รับข้อผิดพลาด บรรทัด "field" child "มีประเภทที่ไม่สมบูรณ์" ว่าไง? typedef struct Cell { int isParent; Cell child; } Cell;
137 c  recursion  struct  typedef 


7
defaultdict ที่ซ้อนกันของ defaultdict
มีวิธีทำให้ defaultdict เป็นค่าเริ่มต้นสำหรับ defaultdict ด้วยหรือไม่? (เช่นค่าเริ่มต้นการเรียกซ้ำแบบไม่มีที่สิ้นสุด?) ฉันต้องการที่จะทำได้: x = defaultdict(...stuff...) x[0][1][0] {} ฉันทำได้x = defaultdict(defaultdict)แต่นั่นเป็นเพียงระดับที่สอง: x[0] {} x[0][0] KeyError: 0 มีสูตรที่สามารถทำได้ แต่สามารถทำได้โดยใช้อาร์กิวเมนต์ defaultdict ปกติหรือไม่? โปรดทราบว่านี่เป็นการถามถึงวิธีการสร้างค่าเริ่มต้นแบบเรียกซ้ำแบบไม่มีที่สิ้นสุดดังนั้นจึงแตกต่างจากPython: defaultdict of defaultdict? ซึ่งเป็นวิธีการตั้งค่า defaultdict สองระดับ ฉันอาจจะใช้รูปแบบพวงแต่เมื่อฉันรู้ว่าฉันไม่รู้วิธีทำมันทำให้ฉันสนใจ

30
การเรียกซ้ำคืออะไรและฉันควรใช้เมื่อใด
ล็อค คำถามนี้และคำตอบถูกล็อกเนื่องจากคำถามไม่ตรงประเด็น แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ยังไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ หนึ่งในหัวข้อที่ดูเหมือนจะเกิดขึ้นเป็นประจำในรายชื่ออีเมลและการสนทนาออนไลน์คือข้อดี (หรือขาดไป) ของการเรียนปริญญาวิทยาศาสตร์คอมพิวเตอร์ ข้อโต้แย้งที่ดูเหมือนจะเกิดขึ้นครั้งแล้วครั้งเล่าสำหรับฝ่ายลบคือพวกเขาเขียนโค้ดมาหลายปีแล้วและไม่เคยใช้การเรียกซ้ำ ดังนั้นคำถามคือ: การเรียกซ้ำคืออะไร? ฉันจะใช้การเรียกซ้ำเมื่อใด ทำไมคนไม่ใช้การเรียกซ้ำ?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.