Close Menu
Datormagazin
    Facebook
    Senaste testerna
    • Test: Logitech Signature Slim Solar Plus
    • Test: Huawei Watch 5 & Fit 4 Pro
    • Test: Huawei Watch GT 3 SE
    • Test: Beoplay EX
    • Test: Sony Xperia 1 III
    DatormagazinDatormagazin
    • Hem
    • Nyheter
    • Tester
      1. Toppklass
      2. DMZ Rekommenderar
      3. Gaming
      4. Jämförande test
      5. View All

      Test: Sennheiser HD 500 BAM

      2 december, 2025

      Test: Be quiet Dark Power 14

      18 oktober, 2025

      Test: Logitech MX Master 4

      4 oktober, 2025

      Test: Sandberg Solar Charger 40W LightWeight

      4 augusti, 2025

      Test: JBuds Lux ANC och Epic Sport ANC3

      2 januari, 2026

      Test: Arlo Essential 3 2K outdoor pan-tilt-zoom

      21 december, 2025

      Test: Kioxia Exceria Plus G2 Portable

      15 december, 2025

      Test: Motorola Edge 70

      8 december, 2025

      Vätskekylningens extra nivå av kraft

      30 december, 2025

      Test: CougarGaming CFV235

      6 december, 2025

      Test: Sennheiser HD 500 BAM

      2 december, 2025

      Test: Steelseries Arctis Nova Elite

      26 november, 2025

      Test: Logitech Ergo K860 vs. Microsoft Sculpt Ergonomic Keyboard

      19 augusti, 2021

      Vi utser den bästa multiskrivaren

      20 maj, 2021

      Test: Cooler Master Masterair MA624 Stealth och MA612 Stealth ARGB

      12 maj, 2021

      Test: Oneplus 9 Pro och Oneplus 9

      21 april, 2021

      Tekniken Bakom Slumpgeneratorer: Så Garanteras Rättvisa I Svenska Nätcasinon

      8 januari, 2026

      Den bästa smartphone för onlinecasinon

      8 januari, 2026

      Test: JBuds Lux ANC och Epic Sport ANC3

      2 januari, 2026

      Årets viktigaste säsongskampanjer 2025 – julbonusar och sportevenemang i fokus

      2 januari, 2026
    • DMZ-riggen
    • Programtips
    • Gaming
    • Fråga experten
      • Hårdvara
      • Mjukvara
    • DMZ Retro
    • Shop
    • Om DMZ
      • Om Datormagazin
      • Annonsera
      • Nyhetsbrevet
      • Kundtjänst
      • Press & PR
    Facebook
    Datormagazin
    Hem » Fråga experten » Rekursivitet i PHP
    Fråga experten

    Rekursivitet i PHP

    redaktionenBy redaktionen16 februari, 20092 Mins Read

    Fråga

    Jag håller på med ett rekursivt script. Jag har testat det och det fungerar bra upp till en viss nivå, men när det blir fråga om lite mer komplicerad input stannar det utan felmeddelande. Precis som om minnet tar slut eller nåt sådant. I Apache-loggen står det: child pid 7638 exit signal Segmentation fault (11)

    Jag har gjort det som ett CLI och då får jag ”Segmenteringsfel”.

    Koden är rätt, men förmodligen gör jag något logiskt fel. Har försökt googla, men segmenteringsfel verkar kunna vara i stort sett vilket programmeringsfel som helst som orsakas av att man försöker komma åt minnet på ett felaktigt sätt.

    Jag har ändrat error reporting mm:

    ini_set(”error_reporting”, ”E_ALL”); ini_set(”display_errors”, ”On”); ini_set(”memory_limit”, -1); ini_set(”max_execution_time”, 0);

    men det verkar som om det inte spelar någon roll. Får inget meddelande om vad som är fel.

    Det finns ett Return, men det kan ta ca 5-6 tusen rekursiva anrop innan detta inträffar. Själva funktionen är liten och tar inte mycket minne. Ska inte detta gå?

    /Hälsningar jodomama

    Svar

    Hej Jodomama.

    När man använder rekursivitet så kommer varje anrop att använda en del av stacken, bland annat för parameteröverföring men även för lokala variabler och återhoppsadress.

    Ett sätt att minska mängden allokerad data på stacken är att använda heapen istället. Dock kommer eventuella pekare ta plats i stacken.

    Vid några tester i PHP5.2.8 kom vi fram till följande minnesgränser,

    memory_limit: 1M
    rekursioner 5421
    fel: Fatal error: Allowed memory size of 1048576 bytes exhausted (tried to allocate 40 bytes) in

    memory_limit: 2M
    rekursioner 11126
    fel: Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 40 bytes) in

    memory_limit: 4M
    rekursioner 19184
    fel (i syslog): child pid 2066 exit signal Segmentation fault (11)

    memory_limit: 128M
    rekursioner 19184
    fel (i syslog): child pid 2066 exit signal Segmentation fault (11)

    memory_limit: 256M
    rekursioner 19184
    fel (i syslog): child pid 2066 exit signal Segmentation fault (11)

    Som du ser har vi provat att utöka minnet, vilket hjälper till en viss mån. Men tillsist uppkommer ändå en gräns som begränsar antalet anrop (19184 st anrop)

    På http://bugs.php.net/bug.php?id=43187 kan man läsa mer om PHPs ståndpunkt i denna fråga.

    Är det tail recusion (se http://en.wikipedia.org/wiki/Tail_recursion) kan man lätt skriva om metoden. Självklart kan du även skriva om andra typer av rekursioner, men det kan vara besvärligare.

    Oavsett ser det tyvärr ut som du får skriva om din källkod.

    Lycka till

    Share. Facebook Twitter LinkedIn Email WhatsApp

    Missa inte

    Fråga experten

    Konvertera till Windows 11

    8 november, 20211 Min Read
    linuxtips

    Minitips – Fånga ett fönster som rymt

    22 oktober, 20211 Min Read
    Fråga experten

    Hur får jag Wi-Fi genom betongvägg?

    26 augusti, 20212 Mins Read
    Fråga experten

    Hur kan jag slippa nätverkskabel till övervåningen?

    6 augusti, 20212 Mins Read
    Add A Comment
    Leave A Reply Cancel Reply

    Senaste kommentarerna
    • Anders om Har Microsoft råkat avslöja Windows 12?
    • Andreas Rejbrand om Test: Samsung Galaxy watch 7
    • Petter om Test: Samsung Galaxy watch 7
    • Anders Öhman om Test: Samsung Galaxy watch 7
    • Tobias om Test: Samsung Galaxy watch 7
    Fler nyheter

    Test: Huawei Watch GT 6

    28 september, 2025

    OnePlus Pad Lite tillgänglig för försäljning

    5 augusti, 2025

    Test: Sandberg Solar Charger 40W LightWeight

    4 augusti, 2025

    Test: JBL Tour One M3 smart TX

    9 juli, 2025

    Toppklass

    Test: Be quiet Dark Power 14

    18 oktober, 2025

    Test: Huawei Watch 5 & Fit 4 Pro

    15 maj, 2025

    Test: OnePlus 12

    23 februari, 2024

    Test: Philips Evnia 49M2C8900

    7 januari, 2024
      Kontaktinformation
      Kontaktinformation

      Omsoc Publishing AB
      Datormagazin
      Box 440 73
      100 73 Stockholm
      Sweden

      E-post: datormagazin@datormagazin.se

      Missa inte

      Vätskekylningens extra nivå av kraft

      30 december, 2025

      Test: Steelseries Arctis Nova Elite

      26 november, 2025

      Qualcomm Snapdragon Summit 2025

      30 september, 2025
      Datormagazin Retro
      Datormagazin Retro #8
      Datormagazin
      Facebook YouTube RSS
      • Om cookies
      • Hantering av personuppgifter
      • Köpvillkor www.datormagazin.se
      © 2026 Datormagazin/Omsoc Publishing AB, org-nr: 559034-9014 – Ansvarig utgivare: Anders Öhman

      Type above and press Enter to search. Press Esc to cancel.