Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Auxiliary Space พร้อมฟังก์ชั่นแบบเรียกซ้ำในโปรแกรม C?


ที่นี่เราจะมาดูกันว่าจำเป็นต้องใช้พื้นที่เสริมสำหรับการเรียกใช้ฟังก์ชันแบบเรียกซ้ำอย่างไร และต่างจากการเรียกใช้ฟังก์ชันปกติอย่างไร

สมมติว่าเรามีฟังก์ชันหนึ่งดังนี้ -

long fact(int n){
   if(n == 0 || n == 1)
      return 1;
   return n * fact(n-1);
}

ฟังก์ชันนี้เป็นฟังก์ชันแบบเรียกซ้ำ เมื่อเราเรียกมันว่า fact(5) มันจะเก็บที่อยู่ในสแต็กด้านล่าง -

fact(5) --->
fact(4) --->
fact(3) --->
fact(2) --->
fact(1)

เนื่องจากฟังก์ชันเรียกซ้ำเรียกตัวเองซ้ำแล้วซ้ำอีก ที่อยู่จะถูกเพิ่มลงในสแต็ก ดังนั้นหากฟังก์ชันถูกเรียกซ้ำ n ครั้ง มันจะใช้ช่องว่างเสริม O(n) แต่นั่นไม่ได้หมายความว่าถ้าฟังก์ชันปกติหนึ่งฟังก์ชันถูกเรียก n ครั้ง ความซับซ้อนของสเปซจะเป็น O(n) สำหรับฟังก์ชันปกติเมื่อมีการเรียก ที่อยู่จะถูกผลักเข้าไปในสแต็ก เสร็จแล้วจะเด้ง address จาก stack มาที่ invoker function แล้วโทรใหม่ ดังนั้นมันจะเป็น O(1).