递归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++的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  2. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  3. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

  4. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  5. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  6. C语言用分别用递归和循环求数字的阶乘的方法

    以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...

  7. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  8. Java之递归求和的两张方法

    方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...

  9. C#语言基础——递归

    递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...

  10. SQL Server封闭掉 触发器递归

    SQL Server关闭掉 触发器递归SQL Server  是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...

随机推荐

  1. 查看mysql主外键信息

    SELECT  *FROMinformation_schema.key_column_usage tWHERE t.constraint_schema = '库名称'AND t.constraint_ ...

  2. 003-ubuntu上安装mysql

    安装如下: 1.安装服务端:# sudo apt-get  install mysql-server. 2.安装客户端:# sudo apt-get -y install mysql-server. ...

  3. python多进程打印字符,加锁(Lock加锁)

    先看不加锁的: #coding=utf-8from multiprocessing import Process,Lockimport time def l(num):    #lock.acquir ...

  4. ping和telnet的区别

    内容主要转自: http://jingyan.baidu.com/article/8065f87fc3b31123312498e5.html http://zhidao.baidu.com/link? ...

  5. php 获取随机数的几个方式

    php 获取随机数的几个方式 1.直接获取从min-max的数,例如1-20:$randnum = mt_rand(1, 20); 2.在一个数组里面随机选择一个(验证码的时候需要字母.数字混合的情况 ...

  6. Oracle 11g调用函数几种常用方法

    1. 该函数接受3个可选参数,返回3个数字的和 CREATE OR REPLACE FUNCTION add_three_numbers ( a NUMBER:=0, b NUMBER:=0, c N ...

  7. python之路----面向对象进阶一

    一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() i ...

  8. Mysql优化_内置profiling性能分析工具

    如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK.一般的企业一般是DBA数据库工程师从监控里找到问题.DBA会告诉我们让我们来排查问题,那么可能很多种 ...

  9. 基于Swoole和Redis实现的并发队列处理系统

    背景 由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的.为了完成这些异步操作,我们做了一个基于Redis队列任务系统. 大家知道,一个消息队列处理系统主要分为两大部分:消费 ...

  10. mamcached+magent构建memcached集群

    cat /etc/redhat-release CentOS release 6.7 (Final) 防火墙.selinux 关闭 192.168.12.30 安装libevent和memcached ...