什么是递归?用Java写一个简单的递归程序

作者:小明 时间:2022-02-11 19:39:45 

什么是递归?用Java写一个简单的递归程序

递归的定义

递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决。

递归的要素

自定义递归函数,并确定函数的基本功能
例如Java从键盘输入一个数,求输入这个数的阶乘。这个时候把输入的数字作为形参


int diGuiTest(int n ){
}

找到递归函数循环结束条件
在求阶乘的时候,我们不妨做出如下思考,例如输入的n是5,那么5!是5 * 4 3 * 2 * 1,那是不是可以写成
n
f(n-1)?,程序运行过程如下:
5* f(4)
f(4)相当于重新调用了函数,形参为4
5 * 4* f(n-1)
f(3)相当于重新调用了函数,形参为3
5 * 4* 3* f(n-1)
f(2)相当于重新调用了函数,形参为2
5 * 4* 3 * 2* f(n-1)
f(1)相当于重新调用了函数,形参为1
很容易发现,这时候如果递归调用到n为1的时候,就要结束调用自身
代码如下:


int diGuiTest(int n ){
if(n==1){
return 1;
}
else{
return n*f(n-1);
}
}

代码示例

求1–100之间所有自然数的和


int sum (int n ){
if(n==1){
return 1 ;
}
else{
return n+sum(n-1);
}
}

斐波拉契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2) (n ≥ 2,n ∈ N*)


int fibonacci(int n ){

if (n<=1){
return n;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
}

}

汉诺塔问题

什么是递归?用Java写一个简单的递归程序

首先我们考虑最简单的情况:

什么是递归?用Java写一个简单的递归程序

将最上面的一块放到B,再将最下面一块放到C,再把最上面一块从B放到C即可

什么是递归?用Java写一个简单的递归程序


public class Hanio {
 public static void main(String[] args) {
   char A='A';
   char B='B';
   char C='C';
   hannio(3,A,B,C);
 }
 static  void hannio(int paltfrom,char A,char B, char C){
   if (paltfrom==1){
     move (A,C);
   }else {
     hannio(paltfrom-1,A,C,B);//上面两个盘子,通过C柱到B柱
     move (A,C);
     hannio(paltfrom-1,B,A,C);//
   }
 }
 static  void move(char A,char B){
   System.out.println(A+"---->"+B);
 }
}

来源:https://blog.csdn.net/qq_44644993/article/details/113834046

标签:Java,递归
0
投稿

猜你喜欢

  • Spring Boot使用profile如何配置不同环境的配置文件

    2023-11-25 12:52:36
  • C++实现图书管理系统

    2023-11-03 03:00:35
  • Android WindowManger实现桌面悬浮窗功能

    2023-08-01 02:16:10
  • 兼容Spring Boot 1.x和2.x配置类参数绑定的工具类SpringBootBindUtil

    2023-11-03 05:35:06
  • SpringDataMongoDB多文档事务的实现

    2023-11-25 06:37:55
  • springboot整合微信支付sdk过程解析

    2021-12-30 22:47:29
  • Spring Cloud Ribbon配置详解

    2023-11-25 01:32:50
  • C#创建临时文件的方法

    2023-06-16 14:32:36
  • 详解C语言内核字符串拷贝与比较

    2023-11-02 15:22:30
  • 使用spring注入枚举类型作为参数

    2023-11-23 13:25:57
  • java设计模式之适配器模式

    2021-08-28 09:08:09
  • 使用反射方式获取JPA Entity的属性和值

    2023-07-24 17:43:22
  • java 面试题闰年判断详解及实例

    2023-11-27 19:09:01
  • java仿windows记事本小程序

    2023-11-25 09:24:43
  • Flutter ListView 上拉加载更多下拉刷新功能实现方法

    2023-06-25 19:51:57
  • 详解用Eclipse如何创建Web项目

    2023-11-11 05:41:01
  • Java编程中的检查型异常与非检查型异常分析

    2023-11-04 13:08:38
  • Java泛型类与泛型方法的定义详解

    2023-11-25 01:29:22
  • JAVA8 十大新特性详解

    2023-07-02 10:03:27
  • MyBatis-Plus 查询返回实体对象还是map

    2023-11-28 03:20:19
  • asp之家 软件编程 m.aspxhome.com