Bước tới nội dung

Mô đun:Exponential search

Trang khóa di chuyển
Bách khoa toàn thư mở Wikipedia
-- This module provides a generic exponential search algorithm.local checkType = require('libraryUtil').checkTypelocal floor = math.floorlocal function midPoint(lower, upper)	return floor(lower + (upper - lower) / 2)endlocal function search(testFunc, i, lower, upper)	if testFunc(i) then		if i + 1 == upper then			return i		end		lower = i		if upper then			i = midPoint(lower, upper)		else			i = i * 2		end		return search(testFunc, i, lower, upper)	else		upper = i		i = midPoint(lower, upper)		return search(testFunc, i, lower, upper)	endendreturn function (testFunc, init)	checkType('Exponential search', 1, testFunc, 'function')	checkType('Exponential search', 2, init, 'number', true)	if init and (init < 1 or init ~= floor(init) or init == math.huge) then		error(string.format(			"giá trị init không hợp lệ '%s' được phát hiện trong đối số #2 cho " ..			"'Tìm kiếm theo cấp số nhân' (giá trị init phải là số nguyên dương)",			tostring(init)		), 2)	end	init = init or 2	if not testFunc(1) then		return nil	end	return search(testFunc, init, 1, nil)end