日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中递归实例

發(fā)布時間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中递归实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

前言

一 階乘問題

二 求和問題

三 打印數(shù)字問題

四 求每個位數(shù)相加問題

五 斐波那契數(shù)列

六 經(jīng)典問題:青蛙跳臺階問題

七 經(jīng)典問題:漢諾塔問題


前言

許多人對于遞歸覺得難以理解,其實最主要的原因還是自己少做少練了,今天小編就給大家?guī)硪恍┙?jīng)典的遞歸實例,希望有助于大家提高對代碼的理解力。喜歡的朋友可以點贊留言哦,促進小編的進步!

一 階乘問題

求n的階乘

import java.util.Scanner;public class demoone {public static void main(String[] args) {// 遞歸求 N 的階乘Scanner sc = new Scanner(System.in);//從鍵盤讀取一個數(shù)int a = sc.nextInt();//將該數(shù)放入一個變量里面int ret = jiecheng(a);//定義一個變量用于接收返回值System.out.println(ret);}public static int jiecheng(int n){if(n==1){return 1;//這就是一個趨于終止的條件}else{return n*jiecheng(n-1);//這里就是使用遞歸,一直去調(diào)用自己}} }

二 求和問題

遞歸求1+2+3+……+n的和

import java.util.Scanner;public class demoone {//實現(xiàn)代碼: 遞歸求 1 + 2 + 3 + ... + npublic static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();System.out.println(sum(a));}public static int sum(int n){if(n==1){return 1;}else{return n+sum(n-1);}} }

三 打印數(shù)字問題

import java.util.Scanner;public class demoone {// 實現(xiàn)代碼: 按順序打印一個數(shù)字的每一位(例如 1234 打印出 1 2 3 4)public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();printnum(a);}public static void printnum(int n){if(n<10){System.out.print(n+" ");//不換行輸出,空格隔開,以示區(qū)別}else{printnum(n/10);System.out.print(n%10+" ");//不換行輸出,空格隔開,以示區(qū)別}} }

四 求每個位數(shù)相加問題

例:輸入1234 結(jié)果:10(1+2+3+4)

import java.util.Scanner;public class demoone {//5. 實現(xiàn)代碼: 寫一個遞歸方法,輸入一個非負整數(shù),返回組成它的數(shù)字之和.public static void main(String[] args) {Scanner sc=new Scanner(System.in);int a = sc.nextInt();int ret = sumprint(a);System.out.println(ret);}public static int sumprint(int n){if(n<10){return n;}else{return sumprint(n/10)+n%10;}} }

五 斐波那契數(shù)列

法一(不推薦):這里會有一個明顯的缺點,就是當數(shù)字越來越大的時候,我們的運算速度就明顯會變慢,這不會是我們想要的結(jié)果,所以這種方法我們了解就可以,不推薦使用這個方法。

import java.util.Scanner;public class demoone {//斐波那契數(shù)列public static void main(String[] args) {Scanner sc =new Scanner(System.in);int a = sc.nextInt();System.out.println(fib(a));}public static int fib(int n){if(n==1||n==2){return 1;}else{return fib(n-1)+fib(n-2);//斐波那契數(shù)列的特點,后一項等于前兩項的和,這個就是從后往前推的一個思路}} }

法二(迭代循環(huán),極力推薦)

import java.util.Scanner;public class demoone {//斐波那契數(shù)列public static void main(String[] args) {Scanner sc =new Scanner(System.in);int a = sc.nextInt();System.out.println(fib(a));}public static int fib(int n){if(n==1||n==2){return 1;}int b = 1;int c = 1;int d = 0;for(int i = 3;i<=n;i++){//迭代循環(huán),這里利用循環(huán)迭代,從前面加到后面,減少了很多運算量,大大提高運算效率d = b+c;b=c;c=d;}return d;} }

六 經(jīng)典問題:青蛙跳臺階問題

public class demoone {/*青蛙跳臺階問題:青蛙一次可以跳1個臺階,或者兩個臺階,問此時跳n級臺階有幾種跳法其實,遇到這種問題,我們先具體化分析,找出其中的規(guī)律。然后在進行編寫程旭就會更簡單了,首先青蛙跳1級臺階只有1種跳法,2級臺階有兩種跳法,3級臺階有3張?zhí)?#xff0c;4級臺階有5種跳法,那么這個時候規(guī)律就可以看出來了,也就是說青蛙跳3級臺階的跳法等于1級與2級的和,4級等于3級與2級的和。這樣問題就被簡化成一個斐波那契數(shù)列了*/public static void main(String[] args) {Scanner sc =new Scanner(System.in);int b = sc.nextInt();System.out.println(frogdump(b));}public static int frogdump(int n){if(n==1||n==2){return n;}int a = 1;int b = 2;int c = 0;for(int i=3;i<=n;i++){c=a+b;a=b;b=c;}return c;} }

七 經(jīng)典問題:漢諾塔問題

public class qq {public static void main(String[] args) {hannio(3,'Q','W','R');}public static void move(char a,char b){System.out.print(a+"->"+b+" ");}/*這里的one代表的是初始第一根柱子two代表的是中轉(zhuǎn)盤子的第二根柱子three代表的是目的柱子*/public static void hannio(int n,char one ,char two,char three){if(n==1){move(one,three);//終止條件,只有一個盤子的時候,直接從第一個柱子拿到第三根柱子}else{hannio(n-1,one,three,two);//把最大盤子上面的N-1個盤子通過第三根柱子移到第二根柱子上去move(one,three);//此時就剩下最大的盤子在第一根柱子上面,直接移動到第三根柱子hannio(n-1,two,one,three);//把第二根柱子上面的N-1根柱子通過第一根柱子移動到第三根柱子}} }

總結(jié)

以上是生活随笔為你收集整理的java中递归实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。