log2(I,E):-
(
number(I)
-> E is log(I)/log(2);
number(E)
-> I is 2**E
).
lgstar(N,A):-
(N>1
->
(
log2(N,Nprev),
lgstar(Nprev,Aprev),
Aprev is A-1
);
A is 0
).
Log * 是 log 必须应用于 value 直到它小于或等于 1 的次数。
For Example:
log(log(log(log(3000)))) = 0.86364760439
so the log * (3000) = 4
根据我对序言中递归工作方式的理解,当我到达 N<1 的基本情况时,应该返回 A,并且在堆栈的下一级,Arev 应该被推断为 A +1 或 Aprev 是 1 等等直到它到达返回 A 的堆栈顶部。
Query:
lgstar(3000,A)
--> Should be 4
当我遇到 N<1 的情况时,我尝试将 0 返回到堆栈上的前一层,而不是得到一个参数没有充分实例化的错误。