Java 递归笔记(留个问号)
2021/12/6 17:17:04
本文主要是介绍Java 递归笔记(留个问号),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
递归
- 定义:
- 一个方法自己调用自己(A方法调用A方法)。
- 意义在于勇有限的语句来定义对象的无限集合。
- 递归分为直接递归(A方法调用A方法),间接递归(A方法调用B方法,B方法调用A方法)。
- 结构
-
递归结构包括两个部分:
递归头(边界条件):什么时候不调自身方法。如果没有递归头,程序将陷入死循环。 递归体:什么时候调用自身方法。
- 注意
- 递归一定要有边界条件,如果没有边界条件,递归会陷入死循环,导致栈内存溢出(StackOverflowError)。
- 程序从前往后执行,值从后往前传递。
- 递归中虽然限定了停止下来的条件,但是递归次数不能太多,否则也会发生栈内存溢出。
- 禁止构造方法递归。
- 例如
-
1、下面代码,计算阶乘n!,如5!=54321
public class Test { public static void main(String[] args) { System.out.println(f(5)); } //递归方法(计算阶乘n!)f(1)几位边界条件,也是递归头 public static int f(int x){ if (x==1){ return 1; }else { return x*f(x-1); } } }
-
2、计算数字累加和(如1-100)
public class test { public static void main(String[] args) { System.out.println(sum(100)); } public static int sum(int n) { if (n == 1) { return 1; } else { return n + sum(n - 1); } } }
-
3、排序
遇到个练习题:
需求:
写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。
要点:
写4个方法:加减乘除 利用循环+ switch进行用户交互 传递需要操作的两个数 输出结果
答案:
package com.baidu.www; import java.util.Scanner; /** * Created by joker on 2021/11/23. */ public class testNew { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("选择算法"); int n =0; if(sc.hasNextDouble()){ n = sc.nextInt(); } while (n!=0){ // System.out.println("请输入a和b的值"); switch (n){ case 1: System.out.println("您选择了加法,请输入a和b的值"); if(sc.hasNextDouble()){ System.out.println(addTest(sc.nextDouble(),sc.nextDouble()));; } System.out.println("请重新选择算法"); n = sc.nextInt(); break; case 2: System.out.println("您选择了减法,请输入a和b的值"); if(sc.hasNextDouble()){ System.out.println(jianTest(sc.nextDouble(),sc.nextDouble())); } System.out.println("请重新选择算法"); n = sc.nextInt(); break; case 3: System.out.println("您选择了乘法,请输入a和b的值"); if(sc.hasNextDouble()){ System.out.println(chengTest(sc.nextDouble(),sc.nextDouble())); } System.out.println("请重新选择算法"); n = sc.nextInt(); break; case 4: System.out.println("您选择了除法,请输入a和b的值"); if(sc.hasNextDouble()){ System.out.println(chuTest(sc.nextDouble(),sc.nextDouble())); } System.out.println("请重新选择算法"); n = sc.nextInt(); default: System.out.println("输入错误,请重新选择算法"); n=sc.nextInt(); } } sc.close(); } public static double addTest(double a,double b){ return a+b; } public static double jianTest(double a,double b){ return a-b; } public static double chengTest(double a,double b){ return a*b; } public static double chuTest(double a,double b){ return a/b; } }
说明:
这个题是在一个有关递归的资料中看到的,题是解出来了自己的答案,功能也都实现了,但问题是这题目跟递归貌似没有关系,可能水平有限没有找到使用递归解题的办法。这里留个问号,如果有会的大佬希望指点一下谢谢!
这篇关于Java 递归笔记(留个问号)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南