OCaml에서 더 빠른 버전의 지수 함수를 찾는 데 어려움이 있습니다. 여기에 내가 따르려고 몇 가지 지침입니다빠른 지수 함수 만들기
- 보다는이 함수는 n은 B 두 개의 인수를 수신
expt b n ==> b * (b * (b ...)
의 전형적인 순환 지수 버전은 기본적으로 나누기를 받아 입장을 정복. - n이 홀수 다음
fastexpt b n => b * (b^(n - 1))
가 여기에 지금까지 작성한 코드의 경우 n은 다음, 심지어 다른 fastexpt b n => (b^(n/2))^2
경우 :
let fastexpt : int -> int -> int
= fun b n ->
if n = 0 then 1
else if ((n mod 2) = 0) then (expt b (n/2)) * (expt b (n/2))
else b * (expt b (n - 1));;
내 질문은이 : 작성하는 방법이 있나요 expt
기능을 사용하지 않고이 기능을 사용할 수 있습니까?
사용'? –
아마도 OCaml 언어를 너무 잘 이해하지 못 하겠지만, fastexpt를 포함한다면 fastexpt의 초기 정의를 "let rec"라고해야할까요? – Sean
@Sean, https://stackoverflow.com/help/how-to-ask : ** 질문 게시 및 피드백에 회신 게시 한 후 브라우저에 질문을 약간 열어두고 누군가가 논평하면. 확실한 정보를 놓친 경우 질문을 편집하여 응답 할 준비를하십시오. 누군가가 답변을 게시 할 경우 시험해보고 의견을 제공 할 준비를하십시오! ** 질문을 할 때 답변을 수락하고 의견이나 답변에 응답하십시오. 모든 질문에는 이상한 답변이 없습니다. 무례하게 굴지 마라, 사람들은 도우려고 여기있다. 떠나지 말고 대화하지 마라. – Lhooq