使用 Forest 递归定义树

使用 Forest 递归定义树

我想让森林画出类似下面的树自动地在某种程度上,改变树的根将导致该根产生正确的树。 示例树

根是任意自然数。规则是 child1=floor((parent-1)/2) 和 child2=floor(parent/2)。

目前我编写了一个 Fortran-95 程序,它生成一些 Forest 代码,使我能够生成这样的树。 宽树 我现在想以更详细的方式来做。

我在另一个地方找到了这个代码问题我认为它正在朝着正确的方向发展:

\begin{forest}
 Stern Brocot/.style n args={5}{%
  content=$\frac{\number\numexpr#1+#3\relax}
  {\number\numexpr#2+#4\relax}$,
  if={#5>0}{% true
    append={[,Stern Brocot={#1}{#2}{#1+#3}{#2+#4}{#5-1}]},
    append={[,Stern Brocot={#1+#3}{#2+#4}{#3}{#4}{#5-1}]}
       }{}}% false (empty)
   [,Stern Brocot={0}{1}{1}{0}{3}]
\end{forest}

但我无法理解它们#1,#2,...是如何工作的。

答案1

请注意,我认为我不应该回答代我完成的问题,但有时还是会回答。当我回答时,我是为了我自己。如果结果有用,那就这样吧。如果没有用,就不要回答。从零开始,我通常不太支持微调、调整、解释和其他后续要求。微调和调整通常留给缺乏锻炼的读者练习。解释是针对特定问题、障碍或代码的具体问题,用户提出问题让我解释这一点、这一变化或这一步骤。由于代我完成的问题不发布代码,因此没有开始解释的起点。无论如何,我回答这些问题只是为了我自己。任何解释都是为我而做的。

\documentclass[border=10pt]{standalone}
\usepackage{forest}
\forestset{
  parhau/.style={
    delay={
      tempcounta/.process={O+nw+P {content}{int(floor((##1-1)/2))}},
      tempcountb/.process={O+nw+P {content}{int(floor(##1/2))}},
      if={
        >Rn>{tempcounta}{0}
      }{
        prepend/.process={ RSn=?_ lw2  {tempcounta}{1}{}{parhau}{[##2, ##1]} },
      }{},
      append/.process={ RSn=?_ lw2  {tempcountb}{1}{}{parhau}{[##2, ##1]} },
    },
  },
}
\begin{document}
\begin{forest}
  parhau
  [20]
\end{forest}
\end{document}

<code>parhau</code> 递归

相关内容