Օրեր առաջ սա էի նայում
ու ահագին ոգեւորուեցի այդ Ֆիբոնաչչիի թուերով, շատ հաւէսն են (։ եւ որոշեցի մի սկրիպտ գրել, որին տալիս ես թէ ֆիբոնաչչիի թուերի որ մէկն ես ուզում, ու ինքը տպում է այն, լաւ։
ուրեմն սա կոդն է.
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
ու տենց։