热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java贪心算法几个经典例子_递归算法及经典递归例子代码实现

递归算法(英语:recursionalgorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可

递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。

递归例子:

(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)河内塔问题

124d73cdb3d88d56761256fc6b25d772.png

//河内塔
void hanoi(int n,int p1,int p2,int p3)
{if(1&#61;&#61;n)cout<<"盘子从"<}

&#xff08;3&#xff09;全排列

从n个不同元素中任取m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排列起来&#xff0c;叫做从n个不同元素中取出m个元素的一个排列。当m&#61;n时所有的排列情况叫全排列。

如1,2,3三个元素的全排列为&#xff1a;

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&#61;a;a&#61;b;b&#61;temp;
}
void Perm(int list[],int k,int m)
{if (k &#61;&#61; m-1) {for(int i&#61;0;i}

&#xff08;4&#xff09;斐波那契数列

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

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

有趣的兔子问题&#xff1a;

6369d218be0035438dd2617cc9121590.png

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

分析如下&#xff1a;

第一个月小兔子没有繁殖能力&#xff0c;所以还是一对&#xff1b;

两个月后&#xff0c;生下一对小兔子&#xff0c;总数共有两对&#xff1b;

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

…… 

依次类推可以列出下表&#xff1a;

0140aafe7accdab389f0932cfe463280.png

//斐波那契
long Fib(int n)
{
if (n &#61;&#61; 0)
return 0;
if (n &#61;&#61; 1)
return 1;
if (n > 1)
return Fib(n-1) &#43; Fib(n-2);
}

&#xff08;4&#xff09;判定一系列字符串中是否有相同的内容

b238be96eaf29829e87887cbc0a0b12d.png

public class T {public static void main(String[] args) {String[] a &#61; {"a1","a2","a3","b3","c","b","33","33"};boolean b &#61; new T().fun(0, a);System.out.println(b);}public boolean fun(int n,String[] a){boolean b &#61; false;if(n &#61;&#61; a.length){b &#61; true;}else{for(int i &#61; n; i }

b238be96eaf29829e87887cbc0a0b12d.png



推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • JVM钩子函数的应用场景详解
    本文详细介绍了JVM钩子函数的多种应用场景,包括正常关闭、异常关闭和强制关闭。通过具体示例和代码演示,帮助读者更好地理解和应用这一机制。适合对Java编程和JVM有一定基础的开发者阅读。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
author-avatar
无可奈何花落去
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有