首页 > 编程语言 >从零开始学习C++之递归

从零开始学习C++之递归

时间:2024-08-27 16:08:53浏览次数:12  
标签:return 递归 -- 元素 C++ int 从零开始 阶乘

递归

注:此算法与 函数 有关,如不了解请移步。

wiki pedia 中,递归的解释是这样的:
image

在 C++ 中,递归就是指在函数中调用函数本身;递归的作用类似于分治,将一个大问题分解为很多小问题进行求解。

但是递归的时间复杂度极高,因为要解决很多小问题,所以时间复杂度高达 \(O(2^n)\)。

使用

递归必须要有一个出口!!!(你肯定不想要死循环,对吧?)

这个出口就是我们停止递归的条件,将问题解决了/分解到可以直接解决的程度了就推出递归。、

例题

例题 1

求 \(n!\),即 \(n\) 的阶乘。

流程图如下:

graph TD; A[求 $n$ 的阶乘] --> B[$n$ 是否等于 $1$?]; B[$n$ 是否等于 $1$?] --> |true| C[返回 $1$]; B[$n$ 是否等于 $1$?] --> |false| D[返回 $n \times$ $n - 1$的阶乘]; D[返回 $n \times$ $n - 1$的阶乘] --> |求 n - 1的阶乘| A[求 $n$ 的阶乘];

代码为:

int f(int n)
{
	if (n == 1)
		return 1;
	return n * f(n - 1);
}

例题 2

现在有一个斐波那契数列,求第 \(n\) 个元素。

graph TD; A[求第 $n$ 个元素] --> B[$n$ 是否等于 $1$ 或 $2$?]; B[$n$ 是否等于 $1$ 或 $2$?] --> |true| C[返回 $1$]; B[$n$ 是否等于 $1$ 或 $2$?] --> |false| D[返回 元素$n - 1$ $+$ 元素$n - 2$]; D[返回 元素$n - 1$ $+$ 元素$n - 2$] --> |求第 $n - 1$,$n - 2$ 个元素| A[求第 $n$ 个元素];
int f(int n)
{
	if (n == 1 || n == 2)
		return 1;
	return f(n - 1) + f(n - 2);
}

作者的话

作业:洛谷P1464

拜拜~

标签:return,递归,--,元素,C++,int,从零开始,阶乘
From: https://www.cnblogs.com/George222/p/18382883

相关文章

  • C++/Qt 多媒体(续二)
    一、前言        前边讲述到了Qt的两项独特的模块编程支持的另一项内容——多媒体编程,上篇文章具体讲述的包括一个QMediaPlayer类的示例代码和一个QSoundEffect类的讲解,而本章将会提供一篇示例代码——《基于QMediaRecorder类的音频录制》。    对于上篇内......
  • C++面试基础系列-this指针
    系列文章目录文章目录系列文章目录C++面试基础系列-this指针Overview1.this指针1.1.特性1.2.用法1.3.注意事项2.使用'this'指针的多态类的示例3.在C++中,指针和对象本身有什么区别?关于作者C++面试基础系列-this指针Overview1.this指针在C++中,this指针是一......
  • c/c++代码流程图生成
    以下介绍2款皆免费1.cxx2flow【github项目】c/c++函数解析为dot然后通过Graphviz渲染项目有附带gui程序可直接生成流程图,但是显示效果缩放不太行,建议解析生成dot后喂给其他基于Graphviz的渲染服务,使用过vscode上面的graphviz-interactive-preview,效果还行,也有在线网页渲染......
  • 【编程规范具体案例(基于Qt、微软、谷歌和AUTOSAR C++14 参考)】 C++ 编码规范 之并发篇
    目录标题并发目录12.并发编程规范12.1线程创建与管理规则12.1.1\[必须]明确定义线程的生命周期管理策略12.1.2\[必须]为关键线程设置明确的标识符12.1.3\[必须]在多线程环境中安全地处理异常12.2线程同步规则12.2.1\[必须]使用线程安......
  • C++与C语言中基础数据类型详解
    目录引言基础数据类型分类实际编程中的应用建议结论引言在C++与C语言的编程世界中,理解并正确使用基础数据类型是每个程序员的必备技能。不同的数据类型在内存中的占用和表示方式直接影响到程序的性能和行为。本文将详细介绍C++与C语言中常见的基础数据类型,探讨它们......
  • C++ lambda
    文章目录基本语法捕捉列表函数对象与lambda表达式C++的lambda表达式是C++11及以后版本中引入的一种强大的特性,它提供了一种简洁的方式来定义匿名函数对象。Lambda表达式能够捕获其所在作用域中的变量(以值或引用的方式),并允许你在需要函数对象的地方(比如算法库中的函数......
  • C++常见内存错误及其对策
    常见内存错误及其对策目录常见内存错误及其对策内存分配未成功,却使用了它内存分配成功但未初始化内存操作越界内存泄漏释放内存后继续使用规则总结图表示C++学习资料在软件开发过程中,内存管理是至关重要的一环。内存错误不仅会导致程序崩溃,还可能引发安全问题。本文......
  • c++教程之三大结构
    C++顺序结构教程在编程的世界里,顺序结构是构建所有程序的基础。无论是简单的脚本还是复杂的应用程序,它们都是由一系列按照特定顺序执行的指令组成的。C++,作为一种高效、灵活的编程语言,同样遵循这一原则。本教程将深入介绍C++中的顺序结构,包括变量与数据类型、运算符与表达式、......
  • C++笔记9•list•
    容器之list1.list的介绍(1).list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。(2).list的底层是双向循环链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。(3).优......
  • C++学习 — 函数
    目录1.概述2.函数的定义3.函数的调用4.值传参5.函数的常见样式6.函数的声明7.函数的分文件编写8.函数默认参数 9.函数占位参数10.函数重载(1)函数重载概述(2)函数重载注意事项1.概述作用:将一段经常使用的代码封装起来,减少重复代码   一个较大的程序,一般......