n! means n x (n – 1) x … x 3 x 2 x 1
Find the sum of the digits in the number 100!
let rec factorial (n:bigint) = if n = 1I then 1I else n * factorial(n-1I) let number = factorial 100I let digits = number.ToString().ToCharArray() |> Seq.map (fun c -> int32(c.ToString())) let sum = digits |> Seq.sum
This solution is pretty straight forward, though you might be curious as to what the rec keyword in the factorial function is for. In F# you need to explicitly specify that a function can be recursive and you do so with the rec keyword.
Note that the last three lines can be merged into one:
let answer = (factorial 100I).ToString().ToCharArray() |> Seq.sumBy (fun c -> int32(c.ToString()))
The Seq.sumBy function is basically Seq.map and Seq.sum functions rolled into one.
I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.
Here is a complete list of all my posts on serverless and AWS Lambda. In the meantime, here are a few of my most popular blog posts.
- Lambda optimization tip – enable HTTP keep-alive
- You are thinking about serverless costs all wrong
- Many faced threats to Serverless security
- We can do better than percentile latencies
- I’m afraid you’re thinking about AWS Lambda cold starts all wrong
- Yubl’s road to Serverless
- AWS Lambda – should you have few monolithic functions or many single-purposed functions?
- AWS Lambda – compare coldstart time with different languages, memory and code sizes
- Guys, we’re doing pagination wrong