1
나는 작동하지만 이상하지 않은이 clunky 함수를 작성했습니다. F #에서 계승을 계산하기 위해 메모와 함께 재귀 함수를 작성하는 좋은 방법은 무엇입니까? 이 함수는 사전 형식 데이터 구조를 결과와 함께 반환하거나이 함수와 같은 변수에 저장할 수 있습니다.F를 사용하여 재귀 적으로 Memoization과 함께 Factorials 찾기 #
open System.Collections.Generic
let factorials = Dictionary<int, int>()
factorials.Add(1, 1)
let rec factorial n =
if n <= 1 then 1
else
match factorials.TryGetValue(n) with
| true, _ -> n * factorial(n-1)
| false, _ ->
factorials.Add(n, n * factorial(n-1))
n * factorial(n-1)
let a = factorial 9
이 질문에 codereview.stackexchange.com에 더 적합 –
에 대해 생각하는 것은 - n이 계승의 관점에서 당신은 매우 높은하지 않는 32 비트 정수를 사용하여. 가장 좋은 해결책은'let res = [1; 1; 2; 6; ...]; fac n = res. [n]'이라고하자. 더 정밀도를 위해 bigintegers를 사용하는 것에 대해 생각해야합니다. –
@ildjarn, John Palmer는 이미 이것을 지적했습니다. 실제로 코드를 사용하는 것보다는 학습 연습으로 더 많이하고 있습니다. 내가 문제를 해결하기 위해 노력하고있어 프로젝트 Euler 문제를 F #을 사용하여, 그 문제에서, 나는 단지 1에서 9까지의 계승이 필요합니다. – reggaeguitar