首页 > 编程语言 >C++U3-第09课-递归函数的应用

C++U3-第09课-递归函数的应用

时间:2024-01-14 11:56:01浏览次数:32  
标签:返回 return 数列 递归 int 09 C++ U3 带入

学习目标

 斐波那契数列例题

 

 

我们需要求出斐波那契第n项的值是多少

【思路分析】
我们用递归的方式去求解,当第一项和第二项返回1,否则返回前两项的和

当前为第一项和第二项返回1

当前不为第一项和第二项返回前两项的和

定义n并把n输入,带入到递归求解

【参考代码】

#include <iostream>
using namespace std;
int f(int n) {
    //当前为第一项和第二项返回1
    if (n <= 2) {
        return 1;
    }
    //当前不为第一项和第二项返回前两项的和
    return f(n - 1) + f(n - 2);
}
int main() {
    //定义n并把n输入,带入到递归求解
    int n;
    cin >> n;
    cout << f(n);
    return 0;
}
View Code

[【递归的应用(一)】Pell数列]

 

【题意分析】
对于数列找出数列中的第k项

【思路分析】
第i项为2倍的i-1项加上i-2项的和,我们使用递归的方式去求出第k项

采用递归,f(n) 的里返回 pell 数列的第 n 项的值

n为1和n为2的时候分别返回1和2

当n不为1和2到时候返回2*f(i-1)+f(i-2)

定义n输入n,接着输入n个k,将k带入递归求出第k项的值

【参考代码】
#include <iostream>
using namespace std;
//采用递归,f(n) 的里返回 pell 数列的第 n 项的值
long long f(int n) {
    //n为1和n为2的时候分别返回1和2
    if (n == 1) {
        return 1;
    }
    if (n == 2) {
        return 2;
    }
    //当n不为1和2到时候返回2*f(i-1)+f(i-2)
    return 2 * f(n - 1) + f(n - 2);
}
int main() {
    //定义n输入n,接着输入n个k,将k带入递归求出第k项的值
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int k;
        cin >> k;
        cout << f(k) << '\n';
    }
    return 0;
}
View Code

 

[【递归的应用(一)】辗转相除法最大公约数]

 枚举会超时

 辗转相除法

 

 

【题意分析】
我们对于两个数求出他们的最大公约数

【思路分析】
我们对于两个数进行辗转相除,直到b为0,也就是一边是另一边的倍数

当b为0是输出a

如果b不为0,将b,和a%b带入到递归

【参考代码】
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
    //当b为0是输出a
    if (a % b == 0) return b;
    //如果b不为0,将b,和a%b带入到递归
    return gcd(b, a % b);
}
int main() {
    //定义a和b并输入,将a和b带入到函数递归
    int a, b;
    cin >> a >> b;
    cout << gcd(a, b);
    return 0;
}
View Code

 

初赛知识:

 

 

 

 

标签:返回,return,数列,递归,int,09,C++,U3,带入
From: https://www.cnblogs.com/jayxuan/p/17963508

相关文章

  • 【树上启发式合并】CF1709E XOR Tree
    XORTree\(\mathtt{TAGS}\):树上启发式合并+异或+贪心\(\mathtt{ESTIMATION}\):非常好的启发式合并题目First.如何去除\(0\)路径对于一条路径\(u\tov\),要使其不为\(0\)肯定是将\(\mathtt{LCA}(u,v)\)变为\(2^{30+x}\)最好,这样异或值的第\(30+x\)位一......
  • C++ 学习宝藏网站分享
    C++学习宝藏网站分享1.C++在线参考手册Cppreferencehttps://zh.cppreference.comC++开发者必备的在线参考手册,是我最常访问的C++网站之一。作为参考手册,不仅包含了语言本身的词法、语法特性,还包含了对C++标准库的介绍:需要include哪个头文件、接口参数/返回值说明......
  • C++源码中司空见惯的PIMPL是什么?
    前言:C++源码中司空见惯的PIMPL是什么?用原始指针、std::unique_ptr和std::shared_ptr指向Implementation,会有什么不同?优缺点是什么?读完这篇文章,相信你能搞懂这种设计方式并将其运用于实践,也将更容易阅读源码。1.PIMPL是什么?PIMPL是PointertoIMPLementation的缩写,意思是指......
  • C++多线程并发(一)--- 线程创建与管理
    目录进程和线程的区别何为并发?C++11线程基本操作C++11新标准多线程支持库std::thread类成员函数std::thread的关键总结C++中多线程创建C++的多线程可以充分利用计算机资源,提高代码运行效率。在这里总结了一些多线程应用过程中的基本概念和用法。进程和线程的区别进程是一......
  • C++实现文件内查找字符串
    实现概要:读取放入buf后查找匹配的第一个字符然后使用seek()移动文件指针,peek()查看剩余的字符是否匹配如果剩余的字符匹配把该字符串在文件中的位置push进一个vector<int>中再继续查看剩余的文件内容//str2.cpp--capacity()andreserve()#include<iostream>......
  • 从C向C++4——对象特性
    一.构造函数1.构造函数 在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 我们通过成员函数setname()、setage()、setscore()分别为成员变量name、age、score......
  • C++ --- 智能指针
    一、智能指针存在的意义智能指针主要解决以下问题:(1)内存泄漏:内存手动释放,使用智能指针可以自动释放。(2)共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题。 智能指针的实现依赖于C++语言的RAII(资源获取即初始化)技术,即资源的获取和释放应该与对象的构造和析构分......
  • KY199 查找C++
      二分查找,没什么好说的。关键在于排成有序数组。然而C++调用sort就可以了。#include<iostream>#include<algorithm>#include<cstdlib>usingnamespacestd;booljudge(int*A,intn,intt){inthead=0;inttail=n-1;while(head<=tail){......
  • KY158 找xC++
    摆了几天,重新再来学习。‘把数据输入数组,然后遍历数组就行了,没什么难度。#include<iostream>#include<cstdlib>usingnamespacestd;intmain(){intn;while(cin>>n){int*A=(int*)malloc(sizeof(int)*n);for(inti=0;i<n;i++){......
  • abc097d<并查集,排列>
    题目D-Equals给出\(1\simn\)的排列p,给出\(m\)种对换\((p_i,p_j)\),在这\(m\)种对换中任选操作,对原排列对换任意多次。求能够实现的\(p_i=i\)的最大个数为多少?思路将m中对换中能够相互关联的位置归为一组,这组位置之间可通过对换操作实现任意顺序;因而对于一组内的数据,是......