题目的变换可以理解为求解方程,证明过程如下:
x
=
1
+
1
/
x
x
2
=
x
+
1
x
2
−
x
−
1
=
0
x=1+1/x\\x^2=x+1\\x^2-x-1=0\\
x=1+1/xx2=x+1x2−x−1=0
根据求根公式
a
x
2
+
b
x
+
c
=
0
x
=
−
b
±
b
2
−
4
a
c
2
a
ax^2+bx+c=0\\x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
ax2+bx+c=0x=2a−b±b2−4ac
求得x等于
x
=
1
±
5
2
≈
1.618
x=\frac{1\pm\sqrt{5}}{2}\approx1.618
x=21±5≈1.618
然后程序实现过程
#lang racket
(define (fixed-point f first-guess)
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) 0.000001))
(define (try guess)
(let ((next (f guess)))
(if (close-enough? guess next)
next
(try next))))
(try first-guess))
(define (golden-section x)
(fixed-point(lambda (y) (+ 1 (/ 1 y))) x))
(golden-section 1.5)
运行结果
1.618033813400125