最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java方法遞歸與輸入輸出深入探索

 更新時(shí)間:2025年04月12日 09:30:47   作者:User_芊芊君子  
這篇文章主要介紹了Java方法遞歸與輸入輸出的相關(guān)資料,方法遞歸是一種在方法內(nèi)部調(diào)用自身的技術(shù),適用于具有遞歸結(jié)構(gòu)的問題,輸入輸出是Java程序與外部世界交互的橋梁,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

【前言】

在Java編程的廣闊領(lǐng)域中,方法遞歸和輸入輸出(I/O)是兩個(gè)極為重要的概念。方法遞歸為解決特定類型的問題提供了一種優(yōu)雅且高效的思路;而輸入輸出則是Java程序與外部世界交互的橋梁,無(wú)論是讀取文件數(shù)據(jù),還是向控制臺(tái)輸出信息,都離不開I/O操作。深入理解并熟練運(yùn)用這兩者,對(duì)于提升Java編程能力至關(guān)重要。

一、方法遞歸

1.什么是遞歸

我們小時(shí)候應(yīng)該都聽過這樣一個(gè)故事,“從前有座山,山上有座廟,廟里有個(gè)老和尚講故事,講的是:“從前有座山,山上有座廟,廟里有個(gè)老和尚講故事,講的是:“從前有座山,山上有座廟,廟里有個(gè)老和尚講故事…

這個(gè)故事就很好的體現(xiàn)出了遞歸,它有一個(gè)特征:自身中又包含了自己這種思想在編程和數(shù)學(xué)中非常有用

so:

遞歸是指在一個(gè)方法內(nèi)部調(diào)用自身的過程。它基于一個(gè)簡(jiǎn)單而強(qiáng)大的概念:將一個(gè)復(fù)雜的問題分解為一個(gè)或多個(gè)與原問題相似但規(guī)模更小的子問題,當(dāng)子問題小到可以直接解決時(shí),遞歸就會(huì)停止。

遞歸的必要條件:

  • 將原問題分解成其子問題(子問題必須與原問題解法相同)
  • 遞歸出口(結(jié)束條件,也就是其實(shí)條件)

2. 代碼示例

遞歸求N的階乘

public class Test {

    public static int fac(int N){
        if(N == 1){
            return 1;
        }
        int ret = N * fac(N-1);//調(diào)用自身
        return ret;
}

    public static void main(String[] args) {
      int ret = fac(5);
        System.out.println(ret);
    }
}

執(zhí)行結(jié)果:

3.遞歸的執(zhí)行過程

遞歸的程序執(zhí)行過程還是比較復(fù)雜的,我們要先理解方法的執(zhí)行過程,尤其是方法執(zhí)行結(jié)束后,回到調(diào)用位置繼續(xù)執(zhí)行

計(jì)算5的階乘,fac(5) 會(huì)調(diào)用發(fā)出fac(4) , fac(4) 又會(huì)調(diào)用fac(3) ,以此類推…直到fac(1)。然后從fac(1) 開始返回結(jié)果,逐步計(jì)算出fac(5)的值,這個(gè)過程在Java虛擬機(jī)的調(diào)用棧(方法調(diào)用時(shí),會(huì)有一個(gè)“棧”這樣的內(nèi)存空間描述當(dāng)前的調(diào)用關(guān)系,稱為調(diào)用棧)中進(jìn)行,每一次遞歸調(diào)用都會(huì)在調(diào)用棧中壓入一個(gè)新的棧幀,包含這次調(diào)用的參數(shù)和局部變量等,當(dāng)遞歸返回時(shí),相應(yīng)的棧幀從調(diào)用棧中彈出。

這個(gè)圖片可以幫助我們更好的理解

4.遞歸的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)在于代碼簡(jiǎn)潔、優(yōu)雅,符合人類對(duì)問題的分解思考方式,對(duì)于某些問題如樹形結(jié)構(gòu)遍歷,遞歸實(shí)現(xiàn)非常直觀。
  • 由于遞歸調(diào)用會(huì)消耗棧空間,對(duì)于規(guī)模較大的問題,可能導(dǎo)致棧溢出錯(cuò)誤。此外,遞歸方法的執(zhí)行效率相對(duì)較低,因?yàn)槊看握{(diào)用都伴隨著方法調(diào)用開銷和棧操作。

5.遞歸使用實(shí)例

  • 按順序打印?個(gè)數(shù)字的每?位
public class Test {
    public static void main(String[] args) {
        print(2025);
    }

    public static void print(int n) {
        if (n <= 9) {
            System.out.println(n);
        } else {
            print(n / 10);
            System.out.println(n % 10);
        }
    }
}

執(zhí)行結(jié)果:

2.遞歸求 1 + 2 + 3 + … + 10

public class Test {
    public static void main(String[] args) {
        int ret = sum(10);
        System.out.println(ret);
    }
    public static int sum(int n){
        if(n == 1){
            return 1;
        }
        int ret = n+sum(n-1);
        return ret;
    }
}

執(zhí)行結(jié)果:

3.求斐波那契數(shù)列的第 N 項(xiàng)

斐波那契數(shù)列的定義是:從第三項(xiàng)開始,每一項(xiàng)都等于前兩項(xiàng)之和。該數(shù)列的前兩項(xiàng)通常定義為0和1,即F(0)=0,F(xiàn)(1)=1,那么后續(xù)的項(xiàng)依次為:F(n)=F(n- 1)+F(n - 2)(n\geq2,n為整數(shù))。所以這個(gè)數(shù)列的前幾項(xiàng)就是0,1,1,2,3,5,8,13,21,34…

public class Test {
    public static void main(String[] args) {
       int tmp = fib(6);//第6項(xiàng)
        System.out.println(tmp);
    }
    public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        int ret = fib(n-1)+fib(n-2);
        return ret;
    }
}

執(zhí)行結(jié)果:

二、Java中的輸入輸出

1.輸出

1.1 基本語(yǔ)法

System.out.println(msg);//輸出字符串,換行
System.out.print(msg);//不換行
System.out.printf(format, msg);//格式化輸出
  • print 后面帶\n 就換行
  • 與C語(yǔ)言基本一致
  • 快捷鍵:輸入sout 回車

1.2 格式化字符串

2.輸入

2.1 鍵盤輸入的四個(gè)步驟:

  • 導(dǎo)包import java.util.Scanner;
  • 創(chuàng)建Scanner 類型對(duì)象:
    Scanner scan = new Scanner(System.in);
  • 調(diào)用Scanner類的相關(guān)方法:(nextInt)/(nextFloat)…
  • 調(diào)用關(guān)閉方法:scan.close()

2.2 怎么導(dǎo)包

輸入要使用Scanner讀取字符串,整型,浮點(diǎn)數(shù),(Scanner就是一個(gè)工具)但使用Scanner需要導(dǎo)入java.util.Scanner

import java.util.Scanner;

頁(yè)面頂部就會(huì)出現(xiàn)這一句,這樣就完成導(dǎo)包了

2.3 示例

1.輸入一個(gè)數(shù),并打印

public class Test {
    public static void main(String[] args) {
        //           =  對(duì)象——>System.in 標(biāo)準(zhǔn)輸入
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();//輸入
        System.out.println(a);
    }
}

執(zhí)行結(jié)果:

2.打印姓名/年齡/身高/體重

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入你的姓名:");
        String name = sc.nextLine();
        System.out.println(name);
        System.out.println("請(qǐng)輸入你的年齡:");
        int age = sc.nextInt();
        System.out.println(age);
        System.out.println("請(qǐng)輸入你的身高:");
        float h = sc.nextFloat();
        System.out.println(h);
        System.out.println("請(qǐng)輸入你的體重:");
        float w = sc.nextFloat();
        System.out.println(w);
        sc.close();
    }
}

執(zhí)行結(jié)果:

2.4 多組輸入

循環(huán)讀取

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()){
            int n = scanner.nextInt();
            System.out.println(n);
        }
    }
}

執(zhí)行結(jié)果:

注意:

【總結(jié)】

Java方法遞歸提供了一種獨(dú)特的問題解決思路,適用于具有遞歸結(jié)構(gòu)的問題,但使用時(shí)需注意棧溢出和性能問題。Java輸入輸出流體系為程序與外部世界交互提供了強(qiáng)大而靈活的工具,熟練掌握這兩個(gè)重要的Java特性,將使開發(fā)者在處理各種編程任務(wù)時(shí)更加得心應(yīng)手。

到此這篇關(guān)于Java方法遞歸與輸入輸出的文章就介紹到這了,更多相關(guān)Java方法遞歸與輸入輸出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java集合總結(jié)

    Java集合總結(jié)

    今天小編就為大家分享一篇關(guān)于Java集合總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 使用EasyPoi實(shí)現(xiàn)多Sheet頁(yè)導(dǎo)出的示例代碼

    使用EasyPoi實(shí)現(xiàn)多Sheet頁(yè)導(dǎo)出的示例代碼

    在項(xiàng)目開發(fā)中,我們常常會(huì)遇到導(dǎo)出多Sheet頁(yè)的需求,本文降維打擊介紹一下如何使用EasyPoi實(shí)現(xiàn)這一功能,文中的示例代碼簡(jiǎn)潔易懂,有需要的可以參考下
    2025-03-03
  • JFormDesigner(IDEA)下載方法

    JFormDesigner(IDEA)下載方法

    JFormDesigner是一種Java Swing GUI設(shè)計(jì)工具,可快速創(chuàng)建用戶界面,支持多種布局管理器,如GridBagLayout、SpringLayout等,本文給大家介紹JFormDesigner(IDEA)下載方法,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • Mybatis基于xml配置實(shí)現(xiàn)單表的增刪改查功能

    Mybatis基于xml配置實(shí)現(xiàn)單表的增刪改查功能

    這篇文章主要介紹了Mybatis基于xml配置實(shí)現(xiàn)單表的增刪改查,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java 線程的優(yōu)先級(jí)(setPriority)案例詳解

    Java 線程的優(yōu)先級(jí)(setPriority)案例詳解

    這篇文章主要介紹了Java 線程的優(yōu)先級(jí)(setPriority)案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java 多層嵌套JSON類型數(shù)據(jù)全面解析

    Java 多層嵌套JSON類型數(shù)據(jù)全面解析

    這篇文章主要介紹了Java 多層嵌套JSON類型數(shù)據(jù)全面解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot中的定時(shí)調(diào)度服務(wù)使用詳解

    SpringBoot中的定時(shí)調(diào)度服務(wù)使用詳解

    本文介紹了SpringBoot中定時(shí)任務(wù)的實(shí)踐應(yīng)用,包括pom包配置、啟動(dòng)類啟用定時(shí)調(diào)度、創(chuàng)建定時(shí)任務(wù)、異步執(zhí)行定時(shí)任務(wù)、自定義任務(wù)線程池等內(nèi)容,SpringBoot內(nèi)置的@Scheduled注解可以滿足大部分業(yè)務(wù)需求
    2026-04-04
  • SpringBoot整合華為GaussDB企業(yè)版的實(shí)現(xiàn)

    SpringBoot整合華為GaussDB企業(yè)版的實(shí)現(xiàn)

    本文詳細(xì)介紹了Spring Boot整合華為GaussDB企業(yè)版的完整實(shí)現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Spring中TransactionSynchronizationManager的使用詳解

    Spring中TransactionSynchronizationManager的使用詳解

    這篇文章主要介紹了Spring中TransactionSynchronizationManager的使用詳解,TransactionSynchronizationManager是事務(wù)同步管理器,監(jiān)聽事務(wù)的操作,來(lái)實(shí)現(xiàn)在事務(wù)前后可以添加一些指定操作,需要的朋友可以參考下
    2023-09-09
  • Java線上頻繁FullGC的完整排查流程

    Java線上頻繁FullGC的完整排查流程

    這段文章詳細(xì)介紹了FullGC的的常見觸發(fā)原因原因、排查思路和優(yōu)化方法,涵蓋老年代不足、內(nèi)存泄漏、MetaSpace元空間滿等方面,并提供了從緊急應(yīng)急到長(zhǎng)期優(yōu)化的全面解決方案,需要的朋友可以參考下
    2026-06-06

最新評(píng)論

平阴县| 宿松县| 深水埗区| 邻水| 华坪县| 勃利县| 娄烦县| 永州市| 新泰市| 福建省| 南宫市| 乌兰察布市| 定西市| 金秀| 安乡县| 巩义市| 喜德县| 宜兰县| 清丰县| 沈阳市| 同江市| 汶上县| 邢台市| 丹巴县| 本溪| 宜春市| 乌兰察布市| 灵山县| 哈巴河县| 诏安县| 绍兴县| 郑州市| 江阴市| 石门县| 洛川县| 龙陵县| 开鲁县| 儋州市| 朝阳市| 庄河市| 聂拉木县|