递归(recursion):程序调用自身的编程技巧。

递归满足2个条件:

1)有反复执行的过程(调用自身)

2)有跳出反复执行过程的条件(递归出口)

递归例子:

(1)阶乘

n! = n * (n-1) * (n-2) * ...* 1(n>0)

//阶乘
int recursive(int i)
{int sum = 0;if (0 == i)return (1);elsesum = i * recursive(i-1);return sum;
}

(2)河内塔问题

//河内塔
void hanoi(int n,int p1,int p2,int p3)
{if(1==n)cout<<"盘子从"<<p1<<"移到"<<p3<<endl;else{hanoi(n-1,p1,p3,p2);cout<<"盘子从"<<p1<<"移到"<<p3<<endl;hanoi(n-1,p2,p1,p3);}
}

(3)全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

如1,2,3三个元素的全排列为:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

//全排列
inline void Swap(int &a,int &b)
{int temp=a;a=b;b=temp;
}
void Perm(int list[],int k,int m)
{if (k == m-1) {for(int i=0;i<m;i++){printf("%d",list[i]);}printf("n");}else{for(int i=k;i<m;i++){Swap(list[k],list[i]); Perm(list,k+1,m);Swap(list[k],list[i]); }}
}

(4)斐波那契数列

斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……

这个数列从第三项开始,每一项都等于前两项之和。

有趣的兔子问题:

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

分析如下:

第一个月小兔子没有繁殖能力,所以还是一对;

两个月后,生下一对小兔子,总数共有两对;

三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,总数共是三对;

…… 

依次类推可以列出下表:

//斐波那契
long Fib(int n)
{
 if (n == 0) 
  return 0;
 if (n == 1) 
  return 1;
 if (n > 1) 
  return Fib(n-1) + Fib(n-2);
}

归算法及经典递归例子代码实现相关推荐

  1. 经典Robocode例子代码- -SnippetBot

    经典Robocode例子代码  - -SnippetBot 看过了Robocode的文章,对Robocde有了个大概了解,现在我我们就一个经典的Robocode例子源代码来分析Robocode也jav ...

  2. 经典Robocode例子代码

    经典Robocode例子代码 作者:Alisdair     //*------------------------------------------------------------------ ...

  3. 经典Robocode例子代码--SnippetBot

    经典Robocode例子代码  - -SnippetBot 看过了Robocode的文章,对Robocde有了个大概了解,现在我我们就一个经典的Robocode例子源代码来分析Robocode也jav ...

  4. [算法系列] 深入递归本质+经典例题解析——如何逐步生成, 以此类推,步步为营

    [算法系列] 深入递归本质+经典例题解析--如何逐步生成, 以此类推,步步为营 本文是递归系列的第三篇, 第一篇介绍了递归的形式以及递归设计方法(迭代改递归),;第二篇以递归为引子, 详细介绍了快排和 ...

  5. 十大经典排序算法详细总结 图形展示 代码示例

    文章目录 十大经典排序算法详细总结 0.排序算法说明 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序( ...

  6. 子集和问题 算法_LeetCode 90 | 经典递归问题,求出所有不重复的子集II

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第56篇文章,我们一起来看看LeetCode第90题,子集II(Subsets II). 这题的官方难度是Medi ...

  7. 数据挖掘领域十大经典算法之—SVM算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-Apriori算法 数据挖掘领域十大经 ...

  8. 经典php代码,HTML_php教程:经典PHP代码,经典循环例子 HTMLHEAD - phpStudy

    经典循环例子 经典循环例子 for($counter = 1; $counter <= 6; $counter++)        //循环6次 { print("counter is ...

  9. 数据挖掘领域十大经典算法之—AdaBoost算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-SVM算法(超详细附代码) 数据挖掘领 ...

最新文章

  1. spark ml中一个比较通用的transformer
  2. 有人从英伟达借了台DGX A100,让神经网络自己造了个GTA5自己玩
  3. Windows Server 2012R2 WDS部署Windows 7
  4. 第五章 深度神经网络为何很难训练
  5. 云栖大会特享,热营抢先开,阿里云专家的私教课,限时抢报!
  6. c语言字符串替换有大小写,(C语言)字符串大小写无关查找替换
  7. Opportunity Sales org F4 value help data source
  8. 如何一秒钟从头构建一个 ASP.NET Core 中间件
  9. python求两数之和的命令_数学建模:科学计算Python2小时-Python基础
  10. 千呼万唤始出来 ===Visual Studio Team System 2008 Team Suite 中文版 Out!!!
  11. 《HelloGitHub》第 24 期(两周年)
  12. BUG: button点击高亮延迟问题
  13. (day 35 - 自定义排序规则 )剑指 Offer 45. 把数组排成最小的数
  14. 【c语言】求方程式 ax^2+bx+c=0 的根,分别考虑:1、有两个不等的实根 2、有两个相等的实根
  15. 有意思、值得思考的文章记录
  16. Log binomial 回归详解
  17. 二线城市-太原-程序员真实写照
  18. win7计算机不能设置双屏怎么回事,win7怎么设置双屏显示?Win7双屏显示设置的方法...
  19. 毕设题目:Matlab车牌识别
  20. GE凝胶成像 AI600

热门文章

  1. 【错误记录】Groovy 报错 ( Execution failed for task ‘:compileGroovy‘. > org/apache/tools/ant/taskdefs/Java )
  2. 【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )
  3. 【Android 插件化】VAHunt 引入 | VAHunt 原理 | VAHunt 识别插件化引擎
  4. 【Java 注解】自定义注解 ( 注解解析 )
  5. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )
  6. 【Android 高性能音频】AAudio 音频流 缓冲区 简介 ( AAudio 音频流内部缓冲区 | 缓冲区帧容量 | 缓冲区帧大小 | 音频数据读写缓冲区 )
  7. 邂逅 2008-06-27 23:24
  8. HTML5---19.地理定位的接口使用
  9. leetcode : Reverse Linked List II [two pointers]
  10. spring事件通知机制详解