Java必刷入门递归题×5(内附详细递归解析图)

news/2024/11/30 2:49:11/

目录

1.求N的阶乘

2.求1+2+...+N的和

3.顺序打印数字的每一位

4.求数字的每一位之和

5.求斐波拉契数列


1.求N的阶乘

(1)解析题目意思

  • 比如求5的阶乘,符号表示就是5!;所以5!=5*4*3*2*1
  • 我们下面使用简单的递归完成本题,看递归代码
public static int sub(int n) {if(n==1) {return 1;}return n * sub(n-1);}
  • 下面解析该代码的意思 

(2)递归思路

  • 拆解算法:6!=6*5!;5!=5*4!;4!=4*3!;3!=3*2!;2!=2*1!;其实也就是6!=6*5*4*3*2*1。
  • 用代码表示:整体可能有点乱,需要读者静下心来理解

(3)完整代码

public static void main3(String[] args) {//递归求N的阶乘  int N = 6;int sum = sub(N);System.out.println(sum);}public static int sub(int n) {if(n==1) {return 1;}return n * sub(n-1);}

2.求1+2+...+N的和

(1)解析题目意思

  • 假设N=3,意思是求从1加到N的和(1+2+3)
  • 假设N=4,则需要求(1+2+3+4)的和

(2)递归思路

  • 我们这里以N=3举例
  • 思路:求(1+2+3)可以拆解成:3+(求N=2的和),求N=2的和可以拆解成:2+(求N=1的和)
  • 得出递归代码
public static int sum(int n) {if(n==1) {return 1;}return n+sum(n-1);}
  • 下面剖解递归思路:

(3)完整代码

 public static void main(String[] args) {//递归求和int N = 3;int sum = sum(N);System.out.println(sum);}public static int sum(int n) {if(n==1) {return 1;}return n+sum(n-1);}

3.顺序打印数字的每一位

(1)解析题目意思

  • 比如打印1234,要题目意思打印的结果就是1 2 3 4(中间隔开)

(2)解析递归思路

  • 假设输入的数据是1234,打印出1 2 3 4
  • 思路:要打印1 2 3 4,就要先打印1 ,再打印2 3 4 ;打印2 3 4 ,就要先打印2 ,再打印3 4 ;打印3 4,就要先打印3 ,再打印4
  • 利用/10去掉最低位,%10得到最低位的思路进行
  • 得出递归代码
 public static void print(int n) {if(n<10) {System.out.print(n+" ");return;}print(n/10);System.out.print(n%10+" ");}
  • 解析递归思路

(3)完整代码

public static void main(String[] args) {//顺序打印数组的每一位int num = 1234;print(num);}public static void print(int n) {if(n<10) {System.out.print(n+" ");return;}print(n/10);System.out.print(n%10+" ");}

4.求数字的每一位之和

(1)解析题目

  • 比如给出数字:1345,就需要求1+3+4+5的和

(2)解析递归思路

  • 我们这里以求1234的每一位之和
  • 同样利用/10去掉最低位,%10得到最低位的思路
  • 思路:求1234的每一位之和,可以求4+123的每一位之和;求123的每一位之和,可以求3+12的每一位之和;求12的每一位之和,可以求1+2的每一位之和
  • 递归代码
 public static int sumEvery(int n) {if(n==1) {return n;}return n%10+sumEvery(n/10);}
  • 递归过程解析

(3)完整代码

public static void main(String[] args) {//求数字的每一位之和int N = 1234;int sum = sumEvery(N);System.out.println(sum);}public static int sumEvery(int n) {if(n==1) {return n;}return n%10+sumEvery(n/10);}

5.求斐波拉契数列

(1)了解斐波拉契数列

  • 斐波那契数列,其数值为:1、1、2、3、5、8、13、21、34……这个数列从第3项开始,每一项都等于前两项之和。

(2)递归思路求解

  • 比如求第五个斐波那契数(5):5=3(第四个数)+2(第三个数);3=2(第三个数)+1(第二个数);以此类推,直到n<=2。
  • 递归部分代码
 public static int fib(int n) {if(n<=2) {return 1;}return fib(n-2)+fib(n-1);}
  • 递归思路解析

  • 递归完整代码
 public static void main(String[] args) {//斐波拉契int N = 8;int sum = fib(N);System.out.println(sum);}public static int fib(int n) {if(n<=2) {return 1;}return fib(n-2)+fib(n-1);}

(3)迭代思路

  • 该思路也就是利用循环去做,可以计算更大的斐波那契数
  • 利用:某个数=前面两个数相加,从前面开始往后计算,不断循环即可
  • 代码展示:
 public static void main(String[] args) {//迭代思路int N = 5;int a = 1;int b = 1;int c = 1;while(N>2) {c = a+b;a = b;b = c;N--;}System.out.println(c);}
  • 迭代思路解析:

本次的五道递归题就结束了



http://www.ppmy.cn/news/1212355.html

相关文章

Matplotlib绘图一网打尽【持续更新ing】

2 绘制扇形图 绘制一个展示男女乘客比例的扇形图 得出男女的具体数字 sex_per df["Sex"].value_counts() sex_per # 把画图的包导入进来 import matplotlib.pyplot as plt# 这种绘图方式主要用于有多个子图以及复杂的图形布局的时候。fig,ax plt.subplots()# pl…

Android发热监控实践

一、背景 相信移动端高度普及的现在&#xff0c;大家或多或少都会存在电量焦虑&#xff0c;拥有过手机发热发烫的糟糕体验。而发热问题是一个长时间、多场景的指标存在&#xff0c;且涉及到端侧应用层、手机 ROM 厂商系统、外界环境等多方面的影响。如何有效衡量发热场景、定位…

helm 常用命令搜集 —— 筑梦之路

helm 添加仓库 helm repo add elastic https://helm.elastic.cohelm repo add gitlab https://charts.gitlab.io helm repo add harbor https://helm.goharbor.io helm repo add traefik https://traefik.github.io/charts//添加国内仓库 helm repo add stable http…

网络运维Day11

文章目录 if语句if单分支应用案例 if双分支应用案例 if多分支应用案例 for循环while循环案例 正则表达式基本正则Perl兼容的正则 综合练习总结 if语句 if单分支 if单分支的语法组成&#xff1a; if 条件测试;then 命令序列 fiif 条件测试then 命令序列 fi应用案例 判断用…

环形链表解析(c语言)c语言版本!自我解析(看了必会)

目录 1.判断一个表是否是环形链表&#xff01; 代码如下 解析如下 2.快指针的步数和慢指针的步数有什么影响&#xff08;无图解析&#xff09; 3.怎么找到环形链表的入环点 代码如下 解析如下 1.判断一个表是否是环形链表&#xff01; 代码如下 bool hasCycle(struct L…

王学岗visibility改变后调用onLayout()

自定义控件的时候发现了一个bug。 Button位移动画执行结束后我设置了一个不相关的TextView的可见性由gone变为visible.令人郁闷的是&#xff0c;只要我注释的地方放开。动画执行结束后button都会重新绘制在位移动画开始的位置。注释掉这段代码就正常。 经过分析后得知 View的Vi…

记录bug1

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;项目场景&#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信&#xff0c;每隔 5s 传输一批传感器数据(不是很大) 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1…

java excel、word、PPT转换成pdf预览

先引入包&#xff1a;[lib下载地址](https://mp.csdn.net/mp_download/manage/download/UpDetailed)Controllerpublic AjaxResult fileToPdf(RequestBody VerifyCode url, HttpServletResponse response, HttpServletRequest request) throws IOException {String fileUrl req…