Comprehended-递归,尾递归,二叉树

Questions

        1、什么是递归?

        2、树为什么要分个二叉树出来?

递归与尾递归

        递归的本质是函数的自我调用,函数应满足的条件递归必须也满足。

        递,将函数随着一层层调用压入栈中。归,随着函数运行结束(return,函数体结束),又一层层出栈。这就是递归。

        递归用于可将大问题有规律地分解成一个个小问题,方便代码书写。书写递归代码时在满足函数要求时,还需要满足两个条件:递归出口,递归体(规律,逻辑)。

        优点:方便写代码。

        缺点:占用性能。

        一种递归地优化为尾递归,写递归函数体时,调用自身时,调用的返回值直接被该函数返回,此时调用之后,在栈底的函数可被覆盖,无需等待“归”的过程。

        

        例子

                1、二叉树的递归查找

Node* Search(Node* node, int key)
{
	Node* temp = NULL;
	if (node->key == key)
		temp = node;
	else if (node->child != NULL)
	{
		temp = Search(node->child, key);
		if (temp == NULL&&node->brother!=NULL)
			temp = Search(node->brother, key);
	}
	else if (node->brother != NULL)
	{
		temp = Search(node->brother, key);
	}

	return temp;
}

                2、简单递归,尾递归

//累加
int add(int x)
{
	int result = 0;
	if (x > 1)
		result = add(x - 1) + x;
	else
		result = x;
	return result;
}

//累加-尾递归
int addPlus(int x, int sum = 0)
{
	if (x == 1)
		return sum + x;
	else
		return addPlus(x - 1, sum + x);
}

//斐波那契数列
int feibonaqie(int x)
{
	if (x < 2)
		return x;
	else
	{
		return feibonaqie(x - 2) + feibonaqie(x - 1);
	}
}

二叉树

        每个节点最多只有两个孩子。

        特殊:

                1、完全二叉树:从左到右,从上到下构建二叉树。

                2、满二叉树:叶子节点在同一层,没有度为1的节点。

        斐波那契数列的递归调用,也可以用二叉树解释。

        二叉树的性质:

                

My Existing Answer

        1.函数的自我调用

        2.该结构在某个领域内频繁使用,对于设计某些程序而言更加便利实用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值