История изменений
Исправление monk, (текущая версия) :
Мой вариант. Рекурсия вычисляет каждый Pn один раз, а не экспонециально.
Используется стандартная функция iota вместо своего велосипеда.
#lang scheme
(require srfi/1)
(define (Pn x target-n)
(define (rec Pn-2 Pn-1 n)
(define Pn (/ (- (* (- (* 2 n) 1) x Pn-1)
(* (- n 1) Pn-2))
n))
(if (= target-n n)
Pn
(rec Pn-1 Pn (add1 n))))
(case target-n
((0) 1)
((1) x)
(else (rec 1 x 2))))
(define (legendre n)
(map (lambda (i) (exact->inexact (Pn i n)))
(iota 21 #e-1 #e0.1)))
(display (legendre 2))
Исходная версия monk, :
Мой вариант. Рекурсия вычисляет каждый Pn один раз, а не экспонециально.
Используется стандартная функция iota вместо своего велосипеда.
#lang scheme
(require srfi/1)
(define (Pn x target-n)
(define (rec Pn-2 Pn-1 n)
(define Pn (/ (- (* (- (* 2 n) 1) x Pn-1)
(* (- n 1) Pn-2))
n))
(if (= target-n n)
Pn
(rec Pn-1 Pn (add1 n))))
(cond ((= target-n 0) 1)
((= target-n 1) x)
(else (rec 1 x 2))))
(define (legendre n)
(map (lambda (i) (exact->inexact (Pn i n)))
(iota 21 #e-1 #e0.1)))
(display (legendre 2))