递归我的理解就是
方法或函数调用自己就称为递归
1.分解为:直接量+小规模问题
2.分级为:小规模问题

要想计算f(10),就需要知道f(9),算f(9)需要计算f(8)
特点:
1.自身调用自身
2.避免死循环
方法:
1.找重复(找更小规模的子问题(和原问题具有相同的形式);求n的阶乘,先求n-1的阶乘。。。。)
2.找变化(哪些东西在变化,求n的阶乘,先求n-1的阶乘,。。。。将变化的量作为参数)
3.找边界(循环终止的条件,出口的判断,求n的阶乘,一直递归变为求1的阶乘,到1的时候,1的阶乘为1,返回)
一、求n的阶乘
求n的阶乘,先求n-1的阶乘

#include<iostream>
using namespace std;   int f(int){int n;if(n==1)   //当n=1的时候,条件终止return 1;else return n*f(n-1)   //求n-1的阶乘,再次缩小变为n-1*n-2,n就会越来越小
}

二、打印i-j

#include<iostream>
using namespace std;static void f(int i,int j){    //i为变量,j作为终点不变
if(i>j)  //为出口;终止
return;
cout<<i<<endl;  //打印i
f(i+1,j);   //i+1越靠近j,离j越来越近
}
int main(){f(1,10);
}

三、求数组的和
1.找重复,将arr化为小的规模,将第一个划分出来,剩下的交给递归一直这样重复
2.找变化,数组的长度在变化,起点的不断变化,数组的区间在缩小,终点不变
3.找边界,就为数组的长度

#include<iostream>
using namespace std;static int f(int arr[],int begin ){  //begin初始数组if (begin==arr.length-1){return arr[begin];}return arr[begin]+f(arr,begin+1);   //
}
int main(){int res=f(new int[]{1,2,3,4,5},begin 0);cout<<res<<endl;
}

四、反转字符串
abcd 反转后变为dcba

依次类推最后为b拼接a
变量:为终点在变化,变到起点的时候终止

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;static String res(String src,int end){if(end==0){return ""+src.charAt(0);}return src.charAt(end)+res(src,end-1);
}
int main(){cout<<res<<endl;cout<<(res("abcd",3))<<endl;;
}

递归法:快速掌握递归核心方法相关推荐

  1. 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...

    意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.问:一对兔子,一年能繁殖成多少对兔子?题中本 ...

  2. c语言递归法1 2 n,递归法_C语言递归法_递归算法经典实例(2)

    在网上搜索梵塔游戏fanta.exe,自己动手,体会梵塔问题,尝试解决问题. 3 问题分析 教师提出问题: 1. 盘子移动过程中的两个要求? 2. 寻找规律:(教师引导,学生描述移动过程) (1)两个 ...

  3. 递归与非递归法实现链表相加 CC150 V5 2.5题 java版

    前言:这是一道很有意思的题目,原题如下: You have two numbers represented by a linked list, where each node contains a s ...

  4. 二叉树前序遍历(递归法和迭代法(即非递归法))——C++

    声明:本文原题主要来自力扣力扣,记录此博客主要是为自己学习总结,不做任何商业等活动 本文主要讲解二叉树的前序遍历递归法和迭代法.中序遍历和后序遍历可以参考博主下面两篇博客:二叉树中序遍历(递归法和迭代 ...

  5. 二叉树的最小深度——递归法、迭代法

    1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...

  6. 用递推法和递归法计算一个数的阶乘

    递推法 #include<stdio.h> int main() {int n,y=1,i;scanf("%d",&n);if(n==0||n==1) y=1; ...

  7. xp系统设置锁定计算机,xp如何锁定计算机?xp系统快速锁定计算机的方法

    对于xp系统用户而言,在操作使用电脑进行工作学习的过程中,需要对计算机进行锁定,当计算机被锁定后,用户只有重新登录才能够使用计算机,这在无形中保证了计算机的安全.一般情况下用户都是通过键盘按下CTRL ...

  8. 翻转链表python递归_Python实现链表反转的方法【迭代法与递归法】

    导读 这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python实现链表反转的 ...

  9. c语言库快速幂函数,C语言 - 快速幂 - 迭代法+递归法 - 详细讲解

    快速幂的作用: 解决 求 a ^ n 的问题 (n可以大于1e18), 如果用for循环的话,毫无疑问直接炸掉 -- 所以也就用了算法复杂度在 o(log n)的快速幂算法来解决此类问题. 快速幂递归 ...

  10. 【经典算法实现 44】理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法)

    [经典算法实现 44]理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法) 一.二维FFTFFTFFT快速傅里叶变换 公式推导 二.二维FFTFFTFFT 及 IFFTIF ...

最新文章

  1. uwsgi: invalid option -- 'x'
  2. python加密模块教程_Python加密模块的hashlib,hmac模块使用解析
  3. python循环括号_Python3中小括号()、中括号[]、花括号{}的区别详解
  4. 清华山维eps软件_cass3D三维立体数据采集软件
  5. oracle服务 ora_01033,Oracle ORA-01033 错误的解决办法
  6. win10用户账号密码重置
  7. 服务器 amd cpu性能排行榜,amd cpu 性能排行榜_amd处理器性能排行
  8. c#数字验证码功能,以及判断用户输入是否正确。
  9. Flutter中的Isolate的个人理解
  10. Spring使用标签aop:aspectj-autoproxy 出的一些错
  11. b站下载器,支持分辨率登录,带弹幕,简洁bilili
  12. pycharm 更换 pip 下载源
  13. 为什么有阿里云ACP认证好找工作呢?
  14. Html漂亮的table样式模板
  15. 如何利用R语言处理 缺失值 数据
  16. 将print打印的内容保存到日志
  17. mysql 索引(2)(索引失效的问题及解决)
  18. 如何不改一行代码,让Hippy启动速度提升50%?
  19. 宝真酒业:借助用友U8cloud数智化转型,小集团也能“小而美”
  20. utils.AverageMeter()用法

热门文章

  1. python怎么读发音百度翻译-用python实现百度翻译的示例代码
  2. python基础知识-python基础知识,python必背内容,一、python的基
  3. python下载特别慢-Python3 用 urllib 下载图片非常慢,会是什么原因呢?
  4. python能做什么-大家都在学的 Python,可以用来干什么?
  5. 目前效果最好、应用较广且比较成熟的语音识别模型是什么?
  6. 2020最常用的8个代码编辑器推荐
  7. Node-require的加载机制
  8. JavaScript-封装与继承(两种)
  9. mysql编译安装vs20156_Linux上安装JDK1.8,tomcat9,以及mysql8的步骤
  10. HLS playlist典型示例