# Task:
Write a function that accepts an integer `n` and returns **the sum of the factorials of the first **`n`** Fibonacci numbers**

## Examples:

```python
sum_fib(2)  = 2    # 0! + 1! = 2
sum_fib(3)  = 3    # 0! + 1! + 1! = 3
sum_fib(4)  = 5    # 0! + 1! + 1! + 2! = 5
sum_fib(10) = 295232799039604140898709551821456501251
```

### Constraints:

* #### **2 ≤ N ≤ 22**

### sum_fib(20)

This number is so huge I need to make a separate area for it. Imagine 13327 digits!

```
9928653736262172352930533186343606575520531508610803533683326075968136836106350614826845352855570180756973824478534264089418647583107409466601215858252808236817361583456160496394166392410547995403042278974310114004141591601125139374352094580791191335923364709192884677516337340735050881286173599870564102712009609362158555666371456178005624986162914384584598007577943876091903963220099151890758003938219580565595866639676742143436946382515603496736416191925126418083343340908123949271116414372895379936522832969271267219171603692063390922740887154834642883418078697433844957096133230670087609525899715090691322695345079984538282381903048400947073982647280054266073789965460433047857017505687076923579845694132377682637618524059408549961585446566386749648079936292462747327064278025936833852772820299004299329077053469978825203826210884509837054861371491763507148619862842220021938679732909047841993934844856085744100351944344480585890290250085308697867587494410223336675757135854894845396425849420198283310099448776692798687481179912663086426339803620627092430027074704170368638261753987720152882719584784119598849406922924689237689926900078407444035651263294341956188553177164034897593127788055904780959305194343754348362747235880809190571905064483247723280356903363273241766440842763193066919213539785095871192842692606421239731101161179953784088918780253218968714702754970829196110362712748304472981190172500985036212056008891512591715943529551666297020022545295013332792029190680584871918615789039963992955251102495832888908303508388573326404660045192343910036894576606739730009404643996768381324201684887436118525239127918313553446868369481959060346542929206914045558764481873495640902563179558939454794340645147348060531077758039291288086539035415235329745191164122884847642770184833096074380462004442126123365493535546141814052180207088441639235818177571560268970986584233066266137330817682751586180172379386539800887659067848801273458632884775993286485484439351593802875301531090263420030865043190820277288432453055603535891328518532472449422812847812206507267553254100339388907930703639015107310091345807422502366958709485299235918761467136442743369888930513387650766763462776291319611127078630770724931725881342103399855411445441188237512840869746255207308016566589688534903275723847299298209564223805258400310594489734280193445659519455562310520491149958624344934211797374144961111640480148905676602815443575797732307104495619074264135486973016187707950128055114948820599535099679109555889216345748610077647038880403151577406059562593147843869890405711177041285027897889931238424843771839668578406584337138036502578265544323641251936896555091101607304143924267167989381908487109769177267670477745652098457926314829160306769275674574505876030756947193130860459470049677851491438841393371237021867397838867622968179206043665794525786404777882878983626520891642985016057443885367272159103317999854174850166653191065899629941564603607349293929463834182817010865551370318689093045295273014513651114980596016288564139508160223681895369473793067699648316416302076351892391386318727894912644697323236666722014926057739887981902928069436545050881089761801947608921676288125099672683893303628766282286071020514503204784363394425893771312553400523338226656860526601867846681464250014432098804255258409462661142745585676872567552984225734281537836768738643384329354537747601939266791282620595759045030975407087098471302910701633632781330935697522455112544012901202754384296311873717589131299138478696753402583090947639011550806512977687205411210423316357849301559385649862307435379578361959385902196221298989933642572954710917937173791252391211314915429148069552456217875732295478439265973312228825699583169423554478095943591601486823980520979265181478839539380948270674857590218785329717118958128773306424518493835759217896759252043662826058100229991427857320674702720821115426296389687870062246589055989156285445842889514677789950880262321031452650063434014552214195771536371460986901844425547128476897052339867931194407773355276248222367620387453020534516758695700339849976170385897724159339596299051507023173489852153597518144384372166769725171047242043337130754559091790174484804816919563293006386286162511392343605301231338083421373138513205330685737005312467158986197119463173814408851556062519779146343332176587827731764626043557406516022682254455376553317636367696281143328957263465277529147227703544139848485810423066580665196185757661150648436815382333297246538979549584038243489967689778029975720307976426301731632813721053565602584006669361647374979609110217141189985003840188917225460523033372774136910715202237293584755733438042644216567563619222830113994770478752731026047788940326851901106228403003791587412047281254828416828440015032377802784094192537349093802163873170946231944133598834305362895374385296761312303210357770337974518322216075020141406284393245858603171127132598059695314335254116026015774750512204391768305611864388814440227199472085129010007050779807702538570904612612122122847785419873396835706080930837253267935078019519211144578774018539048762001166387821026612932318929275803074350763474165501151280679078295332194496653441124229917186133498390385848583459652478449111569885999320523456201264267679259698720411336081351073950683043254735712136269994989309863706475332749837817261225049835498965355121540199305600229891991390510311055201955511468648559641359346704552142776951630226650403613301783272418687520682865498961457101231849971934701035810266428273180224460545667047710066882075490868792719554023302422227138639763477450829668914441462253552608668450539166122272582169168528449566069750834510145777716497105357731601670282160142370975965269122162174709982890639939697291295471375228904389027402411105044523636299668899643497982676129894656886199644067190755704030319868386555632587398706953567999535303366271193580226657709089128550820229960260308416882836933526107327691587377547393623399330972953186821903572956890554426109892273792564476202658436982877368699363818383275571024464363253812234180181845792793023972929077048238111853410599802473730305668745780193472599637933612198999296364156279204713221276235283626829300200451729914183662584990767716790116755181810897379761267141975556520098577517615993755933880010336737582711048879991235186003896048879899162949205114351008743341082127133389810507308121724837235451061437827004583403918348794339350154038680926960868293782380474574008317208128031509436820749435677094987154671496719118040920820327150492558224268040877430396924324120417026199184321955826747197141431901476919177226217254346878767913878186347548688475492861195199281214858632047468560892609809310070198107640181730048890480497038978225910741413590570194370730003130749115464114916752595454345179936989255654870699603878866851161060795816701826411977795842165668569682457231330897409400718411292835088304936921993405033675641624187976521955004228244446698613066761411895449256872619586749956979445320224074487142401596207606341255478171157456141643714529525192876130991832916167579006407604270637756249843598869942784507887866618071296055662579691353500596369231888076374989486711621685836546185684963816358568833994505343826575562928865320538659751383972324151413647111903975144894129117141805490967234404614221912580710940662206145626801079012202740018155685922225388275607540319658217999924635859832247416785707795551860289164337197533334627825322143591076566299281852734139726398669060061427364012356206613131503747296575722224156532072756663977254150994742520621211710778895787557618218045482303060084379852358420811572817908657866670662190057861789952594451993466314364564069574684318969912777124781202527695198352359650880522887287387857757529027345970933903944473796531236930783099862375583336669555310505017811196561744578460511099439194021928186602693674359654671860317368146204110188075505252534149731812843980812547940624237843567262814283133285253930937897653100352635098717337120679226155807284748689466939956086079838110595885746613130139916205829094881298762046410938598558360125357344837946534244473840262413102128627114747968081804038270251900940965902513335390775825459105250898084371186363993871627863779925624062409301573893743068806439822744963563409079707218011171435281888565141700512698927981091846612727089877477778669289377012823124044415685345400839252784571809880579795013560422356485010963851337763312501852501309427073651842308840248721973181483285511329436724091764344874079035917982318362766292014864455202259710428424962128291813457354443795044725006153825224988609483911290917501321288252755169139113455787128689530310396891731445879174526142116320701587384574453948814035868148777367732658119774520345545849268033230248989719149723761585910729634786155492311066757412830423023217592388062762745987642551424244427273008032191956315037481291383911824942155585676496663649535850771252992699542649990490186944287473876370453000719814960648189584336387763161191340543646852608305482060694141531544009142394810789781372931168495134751777657321372292000319857647062232950656586230486886673920397794654056427228072515983426476061214304016056409168500037933108071859272519610880496790986258132266920553567366823015354488132245750701301764239392908240718371911953411492918421959129168069681436456933542324207908230546137678301833250332722752626888810140970289006477916589089543503379524601786472693487828915557196136174808810436338042378013699929852474991648407409023374169932791608084380344618735388170499897366302870465777915502098068872427872701112871075142132061242765365959925292298133381485131903408244348395101397470117677019829408610610171922941022718491779316103530497271343378039993641953787488345885112366150321408525910564079828514467058948171170356064046650092845398781480281916012072102331682413145542558482690406144983512143999906107991649126067879722887402169931955258589579638431191350838187907311860265207466608152372372686324975757176416566521640855616739172551780443241678599962342067083012790109016012557789708920368378665933606100592122866743706144656047744655504267531616892269283054115607340410319057763718556272034592657372161537684407044952851812770726615042876762960137471279787360582749788498318832487768624612393216735309107112174704997005917590506244997998484327440677599357701276620235625780027104715006458567121003924223943088598353054932602200538597908754897845417994248083861573010416290341708845316596312979430086700544475899733062567150954231823006774675784823663024300157467058615387461459584070650039355124760620620390835707206850418361441537476539111268591498489615133246551645202820903037831152063261123407680250171817323138137812181664243064610002800108244873766945365586262768271874384921780034466563639283920231853530274307280001379556387399286732464703148731202136358150075120770023425694988787417652771802108489789810295232294997367360696492315675071639130710793798755877030974532111823800049417367136357141799015726719642554174229839015284017755798832786173259586069836941404268220322258730591564817581230950070790272596989841957907031728443483956100812243968637073374397757615739553278508439590127601302123404854672654781328216788199144435601902806379348513628540817232365137238783884976806276656505352419377163767451181016485754124027864607527800888156555250523029566799443125885864101138225750570875035055230791052731355986623829344317099935988663215127843632923637509019945862723260037163763711758654934910027449834486899599704935284151804439825549707410184780069334913722693489475217978950343701008890423109631019446762801453427963033819204196016708224448110489892683975887818006071133016156204196230137144565735732627971448050002915228449970607017194915670936024070615451400858450340124834051896279154304233433399185526574106886162021602451566847606132244441829206601320244646951235636462556058511008158120562847617034399977433836554182812028983174615503556972524501626583043505526033040018204311335146256597289419055643438051722053077835209719369549795660762385560993254170876822358669533625145287503690415348418381258825644543407229190875698384908769334263504847497511095481888644836410530485021720161391301010494065372344208460777036406497525142813195828864349924050214576231802418572986682609588250501371457123447121021520167979626678883394284099255894431202158911556725161944809165555857492203486580468601431587495286434228923376855121487084939326309450268557365089173699752430489893898662385489250265455511220504498909272818152342504748405354594773985411073512586245029415937411508563697264901667841610736177613964045304417052598507762458560141472118059594453400614670799390380457850336769285069013762709299827624317895195392205084179575761814272248901581426836448816408345286493938630461130199287182091992175901271419463658156059897613116232352344615930679227026805733163636226860911569149927129575635688070885630503861218683566424095254861289021651900181379848635536499979380325867886712531123383268402905017112936324294590630632726149686444783548783464832804820259414304101857646550755288386977584758321913103895323544792245725854568887427421517632337140967111574191495525993879337401130692171554751659027957848494551494728291479587113405605656213093078075724510421856398851392665808777758866365553958287771740614526422853397161756204153702200474053334460985391821456501251
```

# Notes:
* I use `test.expect` to make tests secret. If I use `test.assert_equals`, the output will be unreadable because the numbers are huge.

Difficulty: introductory

Starter code:

def sum_fib(n):
	

Solutions:
from math import factorial

fib = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

def sum_fib(n):
    return sum( factorial(x) for x in fib[:n] )

from math import factorial

def sum_fib(n):
    a, b, s = 0, 1, 0
    while n:
        s += factorial(a)
        a, b = b, a+b
        n -= 1
    return s

from math import factorial

def sum_fib(n):
    t, a, b = 0, 0, 1
    while n:
        t += factorial(a)
        a, b, n = b, a+b, n-1
    return t

from math import factorial

def sum_fib(n):
    fibo_num = 1
    fibo_num_prev = 0
    sum_factorial = 0
    for num in range(0,n):
        sum_factorial = sum_factorial + factorial(fibo_num_prev)
        fibo_num_prev, fibo_num = fibo_num, fibo_num + fibo_num_prev
    return sum_factorial


from math import factorial

result, x, y = [0], 0, 1
for _ in range(20):
    result.append(result[-1] + factorial(x))
    x, y = y, x+y
    
sum_fib = result.__getitem__

from itertools import islice
from math import factorial

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

def sum_fib(n):
    return sum(map(factorial, islice(fib(), n)))

import math
def sum_fib(n):
    fib_arr = []
    a, b = 0, 1
    for i in range(n):
        fib_arr.append(math.factorial(a))
        a, b = b, a + b
    return sum(fib_arr)

from math import factorial    
def sum_fib(n):
    a = 1
    b = 1
    s = 2
    i = 2
    while i < n:  
        a, b = b, a+b    
        s += factorial(a)
        i+=1
    return s