如果你要看一个计算第n个Fibonacci数的递归实现(根100,子99和98,孙子98,97,97和96等等),大概是什么比例叶子数与递归树中节点总数的对比?
100
/ \
98 97
/ \ .
96 97 .
. . .
. .
不是家庭作业,只是在学术上对此感到好奇。 (是的,我意识到递归实现是计算斐波纳契数的一种可怕的方法)
答案 0 :(得分:6)
离开的数量只是F(n)
,因为F(i)
只是该节点下方的离开数量。你明白为什么吗? (提示:使用归纳法)
非叶节点的数量是叶节点的数量-1。这是二叉树的属性。所以节点的总数是F(n) + F(n)-1 = 2F(n)-1
。
当n变大时,该比率接近 1/2 。
答案 1 :(得分:5)
fib(x)由叶纤维(x-1)和纤维叶(x-2)组成。所以你得到了与斐波纳契数相同的递归方程。
如果终止点(叶子)是Fib1和Fib0,那么
tree numofleaves
fib2 2
fib3 3
fib4 5
fib5 8
fib6 13
...
和numofleaves(x)= fib(x + 1)。
对于节点数,可以得到方程numnodes(x)= 1 + numnodes(x-1)+ numnodes(x-2)。
答案 2 :(得分:0)
我实际上通过归纳计算了一个证据,证明Fibonacci树中的叶子数量总是超过内部节点的数量。
证明:设E(n)为输入n的斐波那契树的叶子数, 并且M(n)是输入n
的斐波那契树的内部节点的数量 E(n) >= M(n) + 1
基本情况:
f(0):E(0)= 1,M(0)= 0
f(1):E(1)= 1,M(1)= 1
f(2):E(2)= 2,M(2)= 1
f(3):E(3)= 3,M(3)= 2
大小为n的树的叶子等于叶子 每个子树:
E(n)= E(n-1)+ E(n-2)
大小为n的树的内部节点等于每个节点的内部节点 子树,加上根
M(n)= M(n-1)+ M(n-2)+ 1
E(n)> = [M(n - 1)+ 1] + [M(n - 2)+ 1],(通过归纳假设)
因此,E(n)= M(n-1)+ M(n-2)+ 2
所以,E(n)> = M(n)+ 1, QED