C&C++   发布时间:2022-04-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了递推与递归讲解大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_197_0@递推与递归

一、递推

  • 1.递推:从已知道的若干项出发,利用递推关系依次推算出后面的未知项的方法,我们称为递推算法。

  • 2.递推实现:通过循环和数组的形式推出答案。


  • eg:阶乘计算:

    a[1] = 1;//初始值
    for (int i = 2; i <= n; i++) {
    a[i] = a[i - 1] * i;//递推求解
    }

  • 斐波拉契数列:

    a[1] = a[2] = 1;//忘了就全错的初始值
    for (int i = 3; i <= n; i++) {
    a[i] = a[i - 1] + a[i - 2];//还是递推求解
    }

铺砖

题目描述

有2×n的一个长方形方格道路,只有一种1×2的砖去铺,总共有多少种铺法呢?

输入格式

一行,一个n(0≤n≤45)

输出格式

一行,一个数(总共有多少种铺法)

样例输入

3

样例输出

3

数据范围与提示

必须用递推,若没有道路,铺法可视为1种

解析

虑递推,通过画图可得出递推式:a_i = a_{i + 1} + a_{i + 2}ai=ai+1+ai+2

因为题目要求没有道路,铺法可视为1种,所以第0项为1。

代码

#include <bits/stdc++.h>
using namespace std;
@R_618_8237@[55];
int main() {
   int n;
   cin >> n;
   a[0] = 1;
   a[1] = 1;
   for (int i = 2; i <= n; i++) {
        a[i] = a[i - 1] + a[i - 2];
   } 
   cout << a[n];
   return 0;
}

@H_386_197@好了,说了这么“多”,先总结一下

递推步骤:

  • ①读题,抓住关键词

  • ②找出递推式(最难也最重要的步骤)

  • ③寻找初始值(也很重要,千万不能忘)

  • ④写程序,调试


二、递归

1.递归:从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为递归。简单来说,就是把一(多)个函数进行自调用的过程

2.递归实现:用函数的形式进行运算。

3.递推与递归的不同点:递归是从未知到已知逐步接近解决问题的过程,而递推从已知到未知。

  • 举个例子,我们听过的“从前有座山,山里有座庙……”可以用递归的形式来实现。
void f() {
    if (他们都累了||小和尚不想听故事了) {
        cout << "故事讲完了。";
        return;
    }
    cout << "从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事:";
    f();
}
返回类型 f(自定义参数) {
    if (满足条件、到达出口) {
        更新/输出解;
        return;
    }
    维护自定义变量;
    f(自定义参数);
}

最大公约数

题目描述

用递归算法求两个数m和n的最大公约数。(m>0,n>0)

输入格式

两个数,即m和n的值。

输出格式

最大公约数。

样例输入

8 6

样例输出

gcd=2

解析

  • 最简单的方法是枚举两个数的约数,找出最大的公约数,但是可能会超时。
  • 虑递归,需要借助辗转相除法。

代码

#include <bits/stdc++.h>
using namespace std;
int gcd(int x, int y) {
    if (y == 0) return x;
    return gcd(y, x % y);
}
int main() {
    int n, m;
    cin >> n >> m;
    cout << "gcd=" << gcd(n, m);
    return 0;
}

大佬总结

以上是大佬教程为你收集整理的递推与递归讲解全部内容,希望文章能够帮你解决递推与递归讲解所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: