Kezdőlap > Mathematics, Science > Hyperoperations

Hyperoperations

Egy művelet mindenek felett… Picit átevezve az absztrakt matematika és csoport elmélet vizeire, most ne csak osztályokat származtassunk, hanem műveleteket is. Legyen a nulladik hiperművelet az értéknövelés egységgel. Ebből már eljuthatunk az összeadásig (valahány darab értéknövelés), a szorzásig (valahány darab összeadás), a hatványozásig (valahány darab szorzás), a tetrációig (valahány darab hatvány)… és még végtelen sokadfokú művelethez (egyelőre ugyan csak a természetes számok körében).

F# megvalósítás:

let rec hyper (left : int) (op : int) (right : int) : int =
    match (op, right) with
    | (0, _) -> right + 1
    | (1, 0) -> left
    | (2, 0) -> 0
    | (3, 0) -> 1
    | _ -> hyper left (op - 1) (hyper left op (right - 1))

Legyen left az első, right a második operandus, op pedig a művelet fokszáma (összeadás: 1, szorzás: 2, …).

Példa:

let additionExample = hyper 2 1 3 // 5
let multipliationExample = hyper 2 2 3 // 6
let exponentiationExample = hyper 2 4 3 // 8
let tetrationExample = hyper 2 4 3 // 16

Ez a rekurzív megvalósítás egy hatalmas, már nem elfogadható kompromisszum, de szép. :) Teljesen absztrakt, viszont csak nagyon kis számokkal tud dolgozni, mert különben szembekerülünk egy hatalmas StackOverflowExceptionnel.

A C# implementációt innen töltheted le.

Hozzászólás küldéséhez be kell jelentkezni.
Follow

Get every new post delivered to your Inbox.