Օբերոն եւ Փայթն

Օրեր առաջ սա էի նայում

ու ահագին ոգեւորուեցի այդ Ֆիբոնաչչիի թուերով, շատ հաւէսն են (։ եւ որոշեցի մի սկրիպտ գրել, որին տալիս ես թէ ֆիբոնաչչիի թուերի որ մէկն ես ուզում, ու ինքը տպում է այն, լաւ։

ուրեմն սա կոդն է.

import sys

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print fibonacci(int(sys.argv[1]))

օրինակ եթէ հրամայեմ

python2.7 fibonacci_recursive.py 10
55

ու գնալով բարձրանում էի, բայց զգացի թէ գնալով դանդաղանում է պատասխան տալը։ հմմ։

եթէ անենք

time python2.7 fibonacci_recursive.py 40

ստանում ենք

102334155

real    1m47.263s
user    1m47.104s
sys 0m0.048s

այսինքն 40-րդ թիւը ցոյց տալու համար, փայթընին պէտք է 1 րոպէ 47 վայրկեան։ լաւ։ Լիլիթը ինձ ասեց, որ բացի ռեկուրսիւ ձեւից, կայ նաեւ Մաթրիքսի Ֆորմը։

որոշեցի դա էլ փորձել

հիմայ միւսը.

import sys

def fib(n):
    a, b = 0, 1
    for i in range(n):
        a, b = b, a+b
    return a+b

print fib(int(sys.argv[1]))

հիմայ սա աշխատեցնենք.

time python2.7 fibonacci_matrix.py 38

ստանում ենք.

102334155

real    0m0.018s
user    0m0.016s
sys 0m0.000s

լաւ, ահագին արագ է արդէն, բնականաբար ։Ճ բայց…

Որոշեցի մի հատ էլ նոյնը անել Օբերոնով։

Մօտ մի ամբողջ օր չարչարուելուց յետոյ, ինձ ահագին օգնեցին IRCում, եւ վերջում նորայրը մի կարեւոր բան յուշեց, եւ վերջում ստացայ.

MODULE fibonacci;

IMPORT ulmIO;

VAR
n : INTEGER;

PROCEDURE fib* (n : INTEGER) : INTEGER;
    VAR result : INTEGER;

BEGIN
    IF n = 0 THEN
        result := 0
    ELSIF n = 1 THEN
        result:= 1
    ELSE
        result := fib(n-1) + fib(n-2)
    END;
RETURN result
END fib;

BEGIN

ulmIO.WriteInt(fib(40));
ulmIO.WriteLn;

END fibonacci.

օքեյ, քոմփայլ ենք անում (էս իմ ամենասիրած մասն ա, էն գունաւոր աութփութը որ անում ա վոկը ։Ճ)

/opt/voc/bin/voc -m fibonacci.Mod
GNU x86_64 target
not using voc.par file
fibonacci.Mod  translating fibonacci  main program    541
gcc  fibonacci.c -o fibonacci  -fPIC -g -I /opt/voc-1.0.1/src/lib/system/linux/gcc/x86_64 -I /opt/voc-1.0.1/lib/voc/obj   -lVishapOberon -L. -L/opt/voc-1.0.1/lib

եւ ահա աշխատեցնում ենք (։

time ./fibonacci
102334155
real    0m1.957s
user    0m1.952s
sys 0m0.000s

ու տենց։

Պատասխանել մեյլով