#include <stdio.h>
int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("%d\t", fibonaci(i));
}
return 0;
}
我已经读过这个函数表示二叉树。为什么会这样?我浏览了所有相关答案,但都没有提供适当的解释。任何有关递归的帮助文档都将受到高度赞赏。如果可能的话,给我一些超链接。我会对我非常有帮助。
答案 0 :(得分:0)
调用自身的函数称为recursive function
,调用函数本身的过程在C编程中称为recursion
。这里fibonaci(i)
被称为10
次。
fibonacci series
是这样的:1, 1, 2, 3, 5, 8, 13, 21, 34
从0和1开始,系列中的每个新数字都只是前面两个数字的总和。
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1; //returns 1 if i=1
}
return fibonaci(i-1) + fibonaci(i-2); // if it is 2 or greater than 2
在mathematical terms
中,Fibonacci数的序列Fn由递归关系定义
F_n = F_{n-1} + F_{n-2}
有种子值
F_0 = 0 \quad\text{and}\quad F_1 = 1.
写一个返回F_n的函数int fib(int n)。例如,如果n = 0,则fib()应该返回0.如果n = 1,则它应该返回1.对于n> 1。 1,它应该返回F_{n-1} + F_{n-2}
答案 1 :(得分:0)
你能告诉我为什么它被称为二叉树吗?
程序中的函数执行顺序可以描述为树,例如。克。
program()
{
input(x);
proc(x);
output(x);
}
对应树
program()
/ | \
input(x) proc(x) output(x)
大小(节点数)4和高度1(假设输入,proc和输出是叶函数)。
现在,如果函数以及从它调用的每个函数最多执行两个函数调用(与fibonaci()
一样),则相应的图形是二叉树,因为每个节点最多有两个儿童。以调用fibonaci(5)
开头的树的示例,然后缩写为f
:
fibonaci(5)
/ \
f(4) f(3)
/ \ / \
f(3) f(2) f(2) f(1)
/ \ / \ / \
f(2) f(1) f(1) f(0) f(1) f(0)
/ \
f(1) f(0)