Nikolay Nikolov via fpc-pascal said on Mon, 12 Jun 2023 09:15:17 +0300 >On 6/12/23 04:44, Steve Litt via fpc-pascal wrote:
[snip] >> So, subject to your guidance, I'm assuming FPC isn't optimized for >> tail recursion. Is my assumption an accurate one? > >FPC supports tail recursion optimization, it is enabled at -O2 >optimization level for most CPUs, however your code isn't eligible for >that optimization, because there's extra code, after the recursive >invoke. If you change it like that: > >program recursion_hello; > >function nextt(num: int64): int64; > begin > writeln('Going deeper=> ', num); > nextt := num; > if (num > 0) then > begin > nextt(num - 1); > end; > end; > >begin > nextt(1000000000); >end. > >And if you compile with -O2 it works, without segfaulting (tested with >FPC 3.2.2 on x86_64-linux). Thanks Nickolay, You're right about not assigning nextt below the call to nextt, and about the -O2 argument. After learning from you about -O2 and investigating further, I used {$OPTIMIZE tailrec}, which isn't quite the same thing, but it worked beautifully. {$OPTIMIZE on} also enables tail recursion and speeds things up about 10% of tailrec. Thanks for your help. SteveT Steve Litt Autumn 2022 featured book: Thriving in Tough Times http://www.troubleshooters.com/bookstore/thrive.htm _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal