递归法:快速掌握递归核心方法
递归我的理解就是
方法或函数调用自己就称为递归
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;;
}
递归法:快速掌握递归核心方法相关推荐
- 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...
意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.问:一对兔子,一年能繁殖成多少对兔子?题中本 ...
- c语言递归法1 2 n,递归法_C语言递归法_递归算法经典实例(2)
在网上搜索梵塔游戏fanta.exe,自己动手,体会梵塔问题,尝试解决问题. 3 问题分析 教师提出问题: 1. 盘子移动过程中的两个要求? 2. 寻找规律:(教师引导,学生描述移动过程) (1)两个 ...
- 递归与非递归法实现链表相加 CC150 V5 2.5题 java版
前言:这是一道很有意思的题目,原题如下: You have two numbers represented by a linked list, where each node contains a s ...
- 二叉树前序遍历(递归法和迭代法(即非递归法))——C++
声明:本文原题主要来自力扣力扣,记录此博客主要是为自己学习总结,不做任何商业等活动 本文主要讲解二叉树的前序遍历递归法和迭代法.中序遍历和后序遍历可以参考博主下面两篇博客:二叉树中序遍历(递归法和迭代 ...
- 二叉树的最小深度——递归法、迭代法
1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...
- 用递推法和递归法计算一个数的阶乘
递推法 #include<stdio.h> int main() {int n,y=1,i;scanf("%d",&n);if(n==0||n==1) y=1; ...
- xp系统设置锁定计算机,xp如何锁定计算机?xp系统快速锁定计算机的方法
对于xp系统用户而言,在操作使用电脑进行工作学习的过程中,需要对计算机进行锁定,当计算机被锁定后,用户只有重新登录才能够使用计算机,这在无形中保证了计算机的安全.一般情况下用户都是通过键盘按下CTRL ...
- 翻转链表python递归_Python实现链表反转的方法【迭代法与递归法】
导读 这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python实现链表反转的 ...
- c语言库快速幂函数,C语言 - 快速幂 - 迭代法+递归法 - 详细讲解
快速幂的作用: 解决 求 a ^ n 的问题 (n可以大于1e18), 如果用for循环的话,毫无疑问直接炸掉 -- 所以也就用了算法复杂度在 o(log n)的快速幂算法来解决此类问题. 快速幂递归 ...
- 【经典算法实现 44】理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法)
[经典算法实现 44]理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法) 一.二维FFTFFTFFT快速傅里叶变换 公式推导 二.二维FFTFFTFFT 及 IFFTIF ...
最新文章
- uwsgi: invalid option -- 'x'
- python加密模块教程_Python加密模块的hashlib,hmac模块使用解析
- python循环括号_Python3中小括号()、中括号[]、花括号{}的区别详解
- 清华山维eps软件_cass3D三维立体数据采集软件
- oracle服务 ora_01033,Oracle ORA-01033 错误的解决办法
- win10用户账号密码重置
- 服务器 amd cpu性能排行榜,amd cpu 性能排行榜_amd处理器性能排行
- c#数字验证码功能,以及判断用户输入是否正确。
- Flutter中的Isolate的个人理解
- Spring使用标签aop:aspectj-autoproxy 出的一些错
- b站下载器,支持分辨率登录,带弹幕,简洁bilili
- pycharm 更换 pip 下载源
- 为什么有阿里云ACP认证好找工作呢?
- Html漂亮的table样式模板
- 如何利用R语言处理 缺失值 数据
- 将print打印的内容保存到日志
- mysql 索引(2)(索引失效的问题及解决)
- 如何不改一行代码,让Hippy启动速度提升50%?
- 宝真酒业:借助用友U8cloud数智化转型,小集团也能“小而美”
- utils.AverageMeter()用法
热门文章
- python怎么读发音百度翻译-用python实现百度翻译的示例代码
- python基础知识-python基础知识,python必背内容,一、python的基
- python下载特别慢-Python3 用 urllib 下载图片非常慢,会是什么原因呢?
- python能做什么-大家都在学的 Python,可以用来干什么?
- 目前效果最好、应用较广且比较成熟的语音识别模型是什么?
- 2020最常用的8个代码编辑器推荐
- Node-require的加载机制
- JavaScript-封装与继承(两种)
- mysql编译安装vs20156_Linux上安装JDK1.8,tomcat9,以及mysql8的步骤
- HLS playlist典型示例