그냥 하스켈로 시작하고,이 못생긴 조각을 조합하여 목록에서 숫자로 나눌 수있는 숫자와 그 이하의 모든 숫자를 결정합니다.haskell beginner - recursive recursion
divis :: (Integral a) => a -> [a] -> [a]
divis _ [] = []
divis n (x:xs)
| x `mod` n == 0 && n == 2 = x : divis n xs
| x `mod` n == 0 = divis (n-1) [x] ++ divis n xs
| otherwise = divis n xs
내가 같은 호출 할 수 있습니다 ...
head (divis 10 [1..])
이 경우 그러나 2520 년, 목록의 첫 번째 번호를 얻을,이과 효과적으로 해결하기 위해 충분하지 않습니다 보인다 20과 같이 더 높은 숫자를 사용하십시오.
어떻게이 raskell을 haskell로 고칠 수 있습니까?
+1은 – corsiKa
내 첫 인상 알고리즘이 효율적으로하는 것이 가능하지 않을 수 있다는 것이다 목록에서 첫 번째 결과까지는 2와 * n * 사이의 모든 * n-1 * 정수에 대해 테스트해야하므로 적어도 2 차 해법처럼 보입니다. 그리고 당신이 * k *와 * n *의 관계가 초 선형 적이라고 생각할 때, 이것은'O (n^3)'처럼 보입니다. ... –
한 번 보아 주셔서 고맙습니다. [x]를 반복하거나 그것을 수행하는 방법을 알고 있지만, 내 질문을 타이핑 한 후에는 그것을 함께 정렬 할 수 있었지만, 문제를 해결하기 위해 실행하면 영원히 걸리고 나는 어쨌든 물어볼 것이라고 생각했다. , 만약 내가 가난한 알고리즘을 구현했다. – Orbit