Recursion 不触发递归规则

Recursion 不触发递归规则,recursion,drools,Recursion,Drools,我以斐巴诺契为例,对它做了一点修改。它似乎仍然有效,但我不知道如何。这是我的规则 rule "Recurse" salience 10 when f : Fibanocci(value == 0) not Fibanocci(sequence == 0) then System.out.println(f.sequence + "/" + f.value); insert(new Fibanocci(f.sequence -

我以斐巴诺契为例,对它做了一点修改。它似乎仍然有效,但我不知道如何。这是我的规则

rule "Recurse"
salience 10
    when
       f : Fibanocci(value == 0)
       not Fibanocci(sequence == 0)
    then
       System.out.println(f.sequence + "/" + f.value);
       insert(new Fibanocci(f.sequence - 1));
end
我得到以下输出:

50/0 49/0 48/0 47/0 46/0 45/0 .. 等等

在我看来,每次插入新的
Fibanocci
实例时,它都应该从50开始,但事实并非如此

// here is my class, getter/setter skipped
public class Fibonacci {

    private int sequence;
    private long value;

    public Fibonacci(final int sequence) {
        this.sequence = sequence;
    }
}

下面是一个简短的解释,为什么这些规则会像它们一样火:

  • 对于匹配的工作内存元素的任何组合,每个规则只触发一次
  • 第一个匹配由“值==0的Fibonacci对象”和“序列==0的Fibonacci对象不存在”生成
  • 对于此组合,规则将在
    • 修改并更新特定的斐波那契对象
    • 出现序列==0的斐波那契对象,然后消失(*)
  • 该规则的结果将创建另一个Fibonacci对象,其值==0。这只会创建“值==0的Fibonacci对象”和“序列==0的Fibonacci对象不存在”的另一个匹配项。(不存在的事实没有改变。)
*)对此只有99%的把握