2022-11-08 20:21:29 +08:00
|
|
|
const fib = n => {
|
2025-05-30 19:59:02 +00:00
|
|
|
if (n == 0) {
|
2022-11-08 20:21:29 +08:00
|
|
|
return 0
|
|
|
|
|
}
|
2025-05-30 19:59:02 +00:00
|
|
|
if (n == 1) {
|
2022-11-08 20:21:29 +08:00
|
|
|
return 1
|
|
|
|
|
}
|
|
|
|
|
return fib(n - 1) + fib(n - 2)
|
|
|
|
|
}
|
2025-05-30 19:59:02 +00:00
|
|
|
|
2022-10-26 13:11:51 +08:00
|
|
|
/* external */
|
2025-05-30 19:59:02 +00:00
|
|
|
import { h, render } from "preact"
|
2022-10-26 13:11:51 +08:00
|
|
|
|
|
|
|
|
/* external */
|
2025-05-30 19:59:02 +00:00
|
|
|
import { Stateful } from "./stateful.js"
|
2022-10-26 13:11:51 +08:00
|
|
|
|
2022-11-08 21:09:42 +08:00
|
|
|
const Fibonacci = Stateful({
|
2025-05-30 19:59:02 +00:00
|
|
|
getInitialState: () => ({ index: 0 }),
|
2022-10-26 13:11:51 +08:00
|
|
|
|
|
|
|
|
handlers: {
|
2025-05-30 19:59:02 +00:00
|
|
|
prev: ({ index }, event) => ({ index: index - 1 }),
|
|
|
|
|
next: ({ index }, event) => ({ index: index + 1 }),
|
2022-10-26 13:11:51 +08:00
|
|
|
},
|
2025-05-30 19:59:02 +00:00
|
|
|
|
|
|
|
|
render: (props, state, handlers) =>
|
|
|
|
|
h(
|
|
|
|
|
"div",
|
|
|
|
|
null,
|
|
|
|
|
h(
|
|
|
|
|
"h1",
|
|
|
|
|
null,
|
|
|
|
|
"nth Fibonacci number is ",
|
2022-11-08 20:21:29 +08:00
|
|
|
fib(state.index),
|
2025-05-30 19:59:02 +00:00
|
|
|
" for n = ",
|
|
|
|
|
state.index,
|
2022-11-08 20:21:29 +08:00
|
|
|
),
|
2025-05-30 19:59:02 +00:00
|
|
|
h("button", { onClick: handlers.prev }, "Previous"),
|
|
|
|
|
" ",
|
|
|
|
|
h("button", { onClick: handlers.next }, "Next"),
|
|
|
|
|
" ",
|
|
|
|
|
),
|
2022-10-26 13:11:51 +08:00
|
|
|
})
|
|
|
|
|
|
2022-11-08 21:09:42 +08:00
|
|
|
render(h(Fibonacci), globalThis.document.body)
|