递归C++
递归C++
一、递归简介
自己调用自己
二、递归写法
2.1 写法介绍
先写出问题的递推公式
递归部分的边界条件就是递推公式中的边界条件
递归部分的主体部分就是递推公式中的主体部分
2.2 实例
(1)题目
例如:求n!。
(2)分析
递归公式为 f(n)=f(n-1)*n f(1)=1;
对应的递归:
/*
阶乘递归
递归公式为 f(n)=f(n-1)*n f(1)=1;
递归部分的边界条件就是递推公式中的边界条件 f(1)=1
递归部分的主体部分就是递推公式中的主体部分 f(n)=f(n-1)*n
*/
int factorial_Recursion(int n){
if(n==) return ;
else return factorial_Recursion(n-)*n;
}
(3)完整代码
#include <iostream>
using namespace std; int factorial(int n);
int factorial_Recursion(int n); /*
阶乘非递归
*/
int factorial(int n){
int ans=;
for(int i=;i<=n;i++){
ans*=i;
}
return ans;
} /*
阶乘递归
递归公式为 f(n)=f(n-1)*n f(1)=1;
递归部分的边界条件就是递推公式中的边界条件 f(1)=1
递归部分的主体部分就是递推公式中的主体部分 f(n)=f(n-1)*n
*/
int factorial_Recursion(int n){
if(n==) return ;
else return factorial_Recursion(n-)*n;
} int main(){
int ans;
//ans=factorial(5);
ans=factorial_Recursion();
printf("%d\n",ans);
return ;
}
(4)代码结果
120
三、递归实例
3.1 辗转相除法求公约数
递推公式:f(a,b)=f(b,a%b) b!=0;
代码:
#include <iostream>
using namespace std; void exchange(int &a,int &b);
int commonDivisor(int a,int b);
int commonDivisor_Recursion(int a,int b); /*
交换a和b两个数的值
*/
void exchange(int &a,int &b){
a=a^b;
b=a^b;
a=a^b;
} /*
非递归辗转相除法求公约数:
用辗转相除法的时候要保证a大于等于b
*/
int commonDivisor(int a,int b){
if(b>a) exchange(a,b);
int tmp=a%b;
while(tmp){
a=b;
b=tmp;
tmp=a%b;
}
return b;
} /*
递归辗转相除法求公约数:
用辗转相除法的时候要保证a大于等于b
递推公式:f(a,b)=f(b,a%b) b!=0;
边界条件为: b!=0
递归主体为: f(a,b)=f(b,a%b)
*/
int commonDivisor_Recursion(int a,int b){
if(a%b==) return b;
else commonDivisor_Recursion(b,a%b);
} int main(){
int ans;
//ans=commonDivisor(15,9);
ans=commonDivisor_Recursion(,);
printf("%d\n",ans);
return ;
}
代码结果:
3
3.2 判断和相等
题目:
已知一个一维数组a[1...n]和一个确定的数m,判断能否使数组a中的任意几个元素之和等于m,能则输出YES,不能则输出NO。
分析:
分为取a[n]和不取a[n]的情况,则递推公式为:
f(n,m)=f(n-1,m-a[n])||f(n-1,m)
这里可以用一个全局变量来输出结果,只有有一种情况满足了,就满足了。
这个题目没完,后面要补。
递归C++的更多相关文章
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- Android 算法 关于递归和二分法的小算法
// 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...
- 二叉树的递归实现(java)
这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...
- 递归实现n(经典的8皇后问题)皇后的问题
问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...
- C语言用分别用递归和循环求数字的阶乘的方法
以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...
- C#递归解决汉诺塔问题(Hanoi)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...
- Java之递归求和的两张方法
方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...
- C#语言基础——递归
递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...
- SQL Server封闭掉 触发器递归
SQL Server关闭掉 触发器递归SQL Server 是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...
随机推荐
- POST—GET—两种提交方式的区别
主要区别: 安全性 长度限制 数据结构. 总结起来: get方式:以URL字串本身传递数据参数,在服务器端可以从UERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来 ...
- 3:3 OGNL 表达式一
一: 用例 (直接链式访问属性名,其实内部还是的调用set,get方法实现数据的流动); 二: 注意:表达式里面是没有方法的,只能点属性, 访问列表: (访问的时候加上#,表示访问非值栈的内容.) 访 ...
- TouchSlide触屏滑动特效插件的使用
官方连接:http://www.superslide2.com/TouchSlide/ TouchSlide 是纯javascript打造的触屏滑动特效插件,面向手机.平板电脑等移动终端, 能实现触屏 ...
- 20154312 曾林 Exp5_MSF基础应用
--目录-- MSF渗透测试-CVE-2017-11882 1.基础内容回答 2.实践过程记录 2.1.主动攻击实践-ms08_067 2.2.针对浏览器的攻击-ms10_046 2.3.针对客户端的 ...
- HashMap、HashTable、ConcurrentHashMap的区别
一.相关概念 1.Map的概念 javadoc中对Map的解释如下: An objectthat maps keys to values . Amap cannot contain duplicate ...
- [转载]ASP.NET-----Repeater数据控件的用法总结
一.Repeater控件的用法流程及实例: 1.首先建立一个网站,新建一个网页index.aspx. 2.添加或者建立APP_Data数据文件,然后将用到的数据库文件放到APP_Data文件夹中. 3 ...
- 文件和打印机共享 win7 and xp
Win7 摘自:https://www.xp510.com/article/4249.html 首先开启服务 方法:开始---所有程序---附件---运行---输入services.msc----确定 ...
- 前端路由以及浏览器回退,hash & history & location
一.前言 其实不止一次想监听浏览器的回退方法,比如 在 list.html 页滚动加载了几页列表,点到 detail.html 看详情,反回来时又得重新加载几页 H5 有背景音乐的,跳页就得重新放,体 ...
- String内存分析,for-each,参数传递
上午总结: 蓝白书P245 (一)Iterator用法 import java.util.*; public class HashSetTest{ public static void main(St ...
- 01: MySql简介
MySQL其他篇 目录: 参考网站 1.1 数据库介绍 1.2 视图 1.3 触发器 1.4 事物 1.1 数据库介绍返回顶部 1.什么是数据库? 1. 数据库(Database)是按照数据结构来组织 ...