首页 > 其他分享 >递归

递归

时间:2024-02-11 13:55:39浏览次数:23  
标签:调用 return 函数 递归 int Fibonacci

递归

什么是递归

递归是一种直接或间接调用自身函数或方法的函数或者方法。

递归的优缺点

优点

递归的优点是逻辑简单清晰,对于一些问题用递归解决非常方便。

缺点

递归的缺点是调试困难,递归层次过多时,容易造成栈溢出。

递归的组成

递归的组成包括递归头和递归体两部分。

递归头

上面说到递归是直接或间接调用自身函数或方法的函数或方法,也就是说没有条件限制,递归算法就会无限循环直到崩溃,
因此想要完成一个完整的递归算法,递归头是不可或缺的。

递归体

递归体的作用是不断缩小问题的规模,知道逼近递归结束的条件也就是递归头

代码示例

说到递归,那肯定是递归的经典题:斐波那契数列:斐波那契数列的递归写法如下:


#include<iostream>
using namespace std;
int Fibonacci(int n) {
	if (n == 1||n==2) {
		return 1;
	}
	else
	{
		return Fibonacci(n-2) + Fibonacci(n - 1);
	}
}
int main() {
	int n = 0;
	cin >> n;
	cout<<Fibonacci(n);
}

如上面代码所示,递归头是n1||n2,也就是当n等于1或者2时,递归结束,返回1;
递归体为Fibonacci(n-2) + Fibonacci(n - 1),也就是当n不等于1或者2时,继续递归调用Fibonacci函数,直到n等于1或者2。
下面是递归的流程图

在上面的流程图中我们会发现:当n=5时,进入递归,会把f(5)分成发f(4)和f(3)而f(4)和f(3)还会继续分解,最后触碰到f(2)或f(1)
所以可以看成一大堆f(2)和f(1)相加

标签:调用,return,函数,递归,int,Fibonacci
From: https://www.cnblogs.com/yiyulhb/p/18013333

相关文章

  • 力扣递归 两道简单题合成一道中等题之148. 排序链表
    递归归并排序,先找到终点,再合并两个链表 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]/** *Definitionforsingl......
  • 力扣递归之88. 合并两个有序数组
    给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初......
  • 力扣递归之21. 合并两个有序链表
    将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]classSolution{publicListN......
  • python turtle 递归绘制树
    运行效果代码importturtleastimportrandomasrc=["pink","green","lightgreen","orange","red","purple"]defdrawStar(l):t.begin_fill()foriinrange(5):t.forward(l)......
  • RAPTOR:递归摘要与树形检索的结合,提升RAG检索性能
    RAPTOR:递归摘要与树形检索的结合,提升RAG检索性能来源:ICLR'24https://arxiv.org/pdf/2401.18059.pdf随着LLM技术的发展,RAG的价值也来越明显,可以视作LLM应用、落地的一个主要方向。RAG通过结合检索系统和生成模型,在生成回答时先从外部知识库种检索相关信息,辅助LLM进行更......
  • (14/60)二叉树理论基础、递归遍历、迭代遍历、统一迭代
    二叉树理论基础分类满二叉树:只有度为0和度为2的结点,且度为0结点在同一层上(每一层的结点都是满的)。完全二叉树:除了底层外其他层结点都是满的(底层当然也可以是满的),且底层结点从左往右连续不断。二叉搜索树:树的每个结点满足:左子树所有结点值均小于根结点的值右子树所有......
  • 代码随想录算法训练营第十四天| 理论基础 递归遍历 迭代遍历 统一迭代
    理论基础代码随想录(programmercarl.com)二叉树的链接形式定义(防忘)structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(NULL),right(NULL){}};额外补充(关于unordered_map和map)unordered_map和map类似,都是存储......
  • 递归魔法
    反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能够递归实现呢?本文就来由浅入深,stepbystep地解决这个问题。如果你还不会递归地反转单链表也没关系,本文会从递归反转整个单链表开始拓展,只要你明白单链表......
  • 递归
    递归A方法调用B方法,我们很容易理解!递归就是:A方法调用A方法!!就是自己调用自己!!利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的的规模较小的问题来求解。递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复......
  • 洛谷题单指南-递推与递归-P1464 Function
    原题链接:https://www.luogu.com.cn/problem/P1464题意解读:虽然a、b、c可输入的范围比较大,但是递归中,只会限制在0-20以内,由于递归中有大量的重复计算,因此需要采用记忆化搜索来保存已经计算过的递归函数值。解题思路:定义三位数组LLmem[25][25][25],mem[a][b][c]保存w(a,b,c)的......