Fibonacci树

2021-02-04 23:29

BackgroundFibonacci树\$T\n\$是高度为\$n-1\$的有根二叉树序列。它们被定义为如下:\$T\u 0\$没有节点。\$T\u 1\$有一个节点(根节点)。\$T\u{n+2}\$的根节点

解答动态

  • J、14 bytes (2{.];])^:[quot;()quot;(L,R)quot;()quot;,这要感谢外壳理解列表现在是字符串列表而不是数字列表。从前两棵树生成一棵新树的操作符要复杂一些复合物:
    `J?J',e Input:左子树quot;,右子树quot;e将两棵树放在一个列表中[quot;,quot;]J',用逗号quot;`J翻转连接:使用此字符串加入列表?quot;输出:quot;

    • Jelly,2 bytes ,& 联机试用!
      以嵌套列表的形式输出第n个Fibonacci树,其中列表表示节点,整数n表示NIL。如果这太骗人了,你可以用0代表4字节:
      0,“0 在线试用!把前面的二元函数f(x,y)变成三元函数g(x,n,y),如那个:g(x,0,y)=xg(x,1,y)=f(x,y)g(x,n,y)=f(g(x,n-1,y),g(x,n-2,y)) 由于这三个参数都没有给定,因此它们被输入填充-或者在4字节变量中,为x和y提供零。

      • Wolfram语言(Mathematica),19 bytes #<;2

          • #0/@{1,#-2}& 在线试用!
            1索引。返回第n棵树。Mathematica中的
            表达式是树。True表示没有节点。
            目测:

            • 05AB1E,6 bytes ?¨λs¨ 输出无限序列,空字符串作为空节点(即,\$T4\$将导致[[[],quot;]])
              联机尝试。(页脚是用换行分隔符将每棵树打印在一行上。请随意删除它以查看实际的无限列表输出。)
              Ex夷平面:
              λ#启动一个递归环境#输出无限序列,从a(0)=quot;;按下一个空列表[];将它们配对)#我们按如下方式计算a(n):#(隐式推送a(n-2)和a(n-1)s的值#在堆栈上交换它们#并将它们配对:[a(n-1),a(n-2)]

              • carbon,18 bytes fn??ν±1±3±1∧ν?1?ν 在线试用!链接到详细版本的代码。将节点输出为0到2个元素之间的数组。前任夷平面:
                fn 输入n次,循环n次。
                ?ν?ν±1±3±1 取最后和倒数第二个结果(如果有),并将它们作为下一棵树的根的子级。
                ∧ν?1?ν 打印最后一棵树(如果有)。

                • JavaScript(节点.js),29 27字节 根据Jo King的建议保存了2个字节。
                  f=n=lt;1?[]:[f(n-1),f(n-2)] 在线试用!
                  A树由[l,r]表示。孩子的缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺缺者。

                  (gcc)
                  (gcc)
                  (gcc)表示表示表示表示表示;214;214,214 14 14 14 14年,14年,14年,14年,14年,14年;其他若若(n-2)如果(n-2)m(n-2)m[m[i[i[i[i[i[j]=48;其他如果(n-2)m[m[m[m[m[i[j]=48;m[m[i]m[++i][--j]=48;}}} 在线试用!
                  I选择ASCII艺术输出很有趣。那个代码由一个函数c()组成,其作用是调用f(),只调用一次。f()是一个非常有创意的递归函数,热衷于在空白的二维数组上绘制树。
                  只有前5棵树是正确的。要显示更大的树,我应该对节点之间的间距使用指数定律,但如果这样做,那么最高的节点之间的距离将非常遥远,以至于您无论如何都无法识别更大的树。

                  • Retina,34 bytes K`?quot;+`(.*)?(.*)[$1,$2]?$10G` 请联机试用!输出元组树。由于程序使用了历史记录,因此没有测试套件。前任夷平面:
                    K`? 用新行替换输入,表示两个空树。
                    quot;+` 重复原始输入给定的次数…
                    (.*)?(.*)[$1,$2]?$1 。。。创建一个包含前两棵树的节点,并忽略最后一棵树。
                    0G` 只保留最后一棵树。

                    • Common Lisp,58 bytes (defun f(n)(case n(0())(1 0)(t(cons(f(1-n))(f(-n 2???)? )示例:
                      USER>;(从0到7的循环i do(打印(fi)))NIL 0(0)((0)。0) (((0) . 0) 0) ((((0) . 0) 0) (0) . 0) (((((0) . 0) 0) (0) . 0) ((0) . 0) 0) ((((((0) . 0) 0) (0) . 0) ((0) . 0) 0) (((0) . 0) 0) (0) . 0) 另外,如果您(ql:quickload:memoize),您可以执行(memoize函数'f),它将缓存中间结果。

                      • End

                      免责声明:

                      本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。