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

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

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

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]))

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

<br /> $ python2.7 fibonacci_recursive.py 10<br /> 55<br />

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

եթէ անենք

$ 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.

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

<br /> $ /opt/voc/bin/voc -m fibonacci.Mod<br /> GNU x86_64 target<br /> not using voc.par file<br /> fibonacci.Mod translating fibonacci main program 541</p> <p>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<br />

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

<br /> time ./fibonacci<br /> 102334155</p> <p>real 0m1.957s<br /> user 0m1.952s<br /> sys 0m0.000s<br />

ու տենց։