欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

【前言】

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

一、方法遞歸

1.什么是遞歸

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

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

so:

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

遞歸的必要條件:

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

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í)行過程還是比較復雜的,我們要先理解方法的執(zhí)行過程,尤其是方法執(zhí)行結(jié)束后,回到調(diào)用位置繼續(xù)執(zhí)行

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

這個圖片可以幫助我們更好的理解

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

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

5.遞歸使用實例

  • 按順序打印?個數(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 項

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

public class Test {
    public static void main(String[] args) {
       int tmp = fib(6);//第6項
        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 基本語法

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

1.2 格式化字符串

2.輸入

2.1 鍵盤輸入的四個步驟:

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

2.2 怎么導包

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

import java.util.Scanner;

頁面頂部就會出現(xiàn)這一句,這樣就完成導包了

2.3 示例

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

public class Test {
    public static void main(String[] args) {
        //           =  對象——>System.in 標準輸入
        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("請輸入你的姓名:");
        String name = sc.nextLine();
        System.out.println(name);
        System.out.println("請輸入你的年齡:");
        int age = sc.nextInt();
        System.out.println(age);
        System.out.println("請輸入你的身高:");
        float h = sc.nextFloat();
        System.out.println(h);
        System.out.println("請輸入你的體重:");
        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方法遞歸提供了一種獨特的問題解決思路,適用于具有遞歸結(jié)構(gòu)的問題,但使用時需注意棧溢出和性能問題。Java輸入輸出流體系為程序與外部世界交互提供了強大而靈活的工具,熟練掌握這兩個重要的Java特性,將使開發(fā)者在處理各種編程任務(wù)時更加得心應(yīng)手。

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

相關(guān)文章

  • mybatis-plus 如何配置邏輯刪除

    mybatis-plus 如何配置邏輯刪除

    這篇文章主要介紹了mybatis-plus 如何配置邏輯刪除,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Spring Boot 2.x中Actuator的一些知識點

    Spring Boot 2.x中Actuator的一些知識點

    這篇文章主要給大家介紹了關(guān)于Spring Boot 2.x中Actuator的一些知識點,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot 2.x具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • SpringCloud實戰(zhàn)之Zuul網(wǎng)關(guān)服務(wù)

    SpringCloud實戰(zhàn)之Zuul網(wǎng)關(guān)服務(wù)

    服務(wù)網(wǎng)關(guān)是分布式架構(gòu)中不可缺少的組成部分,是外部網(wǎng)絡(luò)和內(nèi)部服務(wù)之間的屏障。這篇文章主要介紹了SpringCloud實戰(zhàn)之Zuul網(wǎng)關(guān)服務(wù)。一起跟隨小編過來看看吧
    2018-05-05
  • Spring Boot與Docker部署實踐

    Spring Boot與Docker部署實踐

    這篇文章主要介紹了Spring Boot與Docker部署實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 使用自定義注解+springAop實現(xiàn)參數(shù)非空校驗方式

    使用自定義注解+springAop實現(xiàn)參數(shù)非空校驗方式

    這篇文章主要介紹了使用自定義注解+springAop實現(xiàn)參數(shù)非空校驗方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解決Request.getParameter獲取不到特殊字符bug問題

    解決Request.getParameter獲取不到特殊字符bug問題

    這篇文章主要介紹了解決Request.getParameter獲取不到特殊字符bug問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot 整合 dubbo xml實現(xiàn)代碼示例

    SpringBoot 整合 dubbo xml實現(xiàn)代碼示例

    這篇文章主要介紹了SpringBoot 整合 dubbo xml實現(xiàn)代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Spring下token過期時間分平臺(web和app)設(shè)置方法

    Spring下token過期時間分平臺(web和app)設(shè)置方法

    本文詳細介紹了在Spring環(huán)境下,針對web端和APP端實現(xiàn)不同token過期時間的方法,通過整合SpringBoot、springSecurity和JWT框架,文章講解了登錄流程、JWT的基本組成以及token鑒權(quán)的核心步驟,需要的朋友可以參考下
    2024-10-10
  • Java?Stream?API詳解與使用示例詳解

    Java?Stream?API詳解與使用示例詳解

    Java?Stream?API?是一個功能強大的工具,適用于處理集合和數(shù)據(jù)流,本文全面介紹了?Java?Stream?API?的概念、功能以及如何在?Java?中有效地使用它進行集合和數(shù)據(jù)流的處理,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 關(guān)于maven環(huán)境的安裝及maven集成idea環(huán)境的問題

    關(guān)于maven環(huán)境的安裝及maven集成idea環(huán)境的問題

    Maven 是一個基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。本文重點給大家介紹關(guān)于maven環(huán)境的安裝及和idea環(huán)境的集成問題,感興趣的朋友一起看看吧
    2021-09-09

最新評論