Recursion: Difference between revisions

From JookWiki
(Add outline)
 
(→‎Mainstream support: add webassembly item)
Line 55: Line 55:


== Mainstream support ==
== Mainstream support ==
- functional programming languages
- lua
- lua


- clang mustcall
- clang mustcall


- functional programming languages
- webassembly

Revision as of 01:31, 2 February 2022

Warning: This article is a work in progress! No refunds if it moves!

- introduction/overview

- 'magic of recursion'?

A bad example

- fibonacci example in lua

- intertwines recursive algorithm and recursion

- mention stack overflow

- imagine an infinite stack

Loops

- recursion can implement loops!

- implementing a for loop

- implementing a while loop

- implementing a do while loop

- each loop iteration only shares global and function args

State machines

- implementing a stateful algorithm

- some kind of menu system

- the code makes sense to read

- this is mutual recursion

- very hard to do in a traditional structured language

Lambdas

- lambdas to actually replace looping constructs/switch statements

- most mainstream languages support lambas

- recursion-based control flow

Tail call elimination

- floating back down to reality

- we've been writing code as there's no stack

- tail call elimination

- hints deeper at function calls vs jumps

- structured programming, goto wars

Mainstream support

- functional programming languages

- lua

- clang mustcall

- webassembly