下面遞歸寫了一段遞歸累加到100,每加20個就換行輸出。
南譙網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,南譙網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為南譙上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的南譙做網(wǎng)站的公司定做!
package?zhidao;
public?class?Digui?{
public?static?int?add(int?num){
int?sum?=?0;
StringBuffer?sb?=?new?StringBuffer();
if?(num?=?0)?{
return?0;
}else{
if?(num?==?1)?{
sum?=?sum+1;
}else?{
sum?=?add(num-1)+num;
}
if?(num?%?20?==?0)?{
System.out.println("[index?=?"+num+"?sum?=?"+sum+"]");
}else?{
System.out.print("[index?=?"+num+"?sum?=?"+sum+"],");
}
}
return?sum;
}
public?static?void?main(String[]?args)?{
add(100);
}
}
public class Fibonacci \x0d\x0a{\x0d\x0apublic static void main(String[] args) \x0d\x0a{\x0d\x0a //初始化變量\x0d\x0a int n0 = 1, n1 = 1, n2;\x0d\x0a \x0d\x0a System.out.print(n0 + " " + n1 + " ");\x0d\x0a \x0d\x0a //引入for循環(huán)依次執(zhí)行三個表達(dá)式,限定i的取值范圍為
回答于?2022-11-16
1、遞歸做為一種算法在程序設(shè)計語言中廣泛使用,是指函數(shù)/過程/子程序在運行過程中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。
2、遞歸算法一般用于解決三類問題:
1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci(斐波那契)的函數(shù))
2)問題解法按遞歸算法實現(xiàn)。(回溯)
3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹的遍歷,圖的搜索)
1.漢諾塔問題
import javax.swing.JOptionPane;
public class Hanoi {
private static final String DISK_B = "diskB";
private static final String DISK_C = "diskC";
private static final String DISK_A = "diskA";
static String from=DISK_A;
static String to=DISK_C;
static String mid=DISK_B;
public static void main(String[] args) {
String input=JOptionPane.showInputDialog("please input the number of the disks you want me move.");
int num=Integer.parseInt(input);
move(num,from,mid,to);
}
private static void move(int num, String from2, String mid2, String to2) {
if(num==1){
System.out.println("move disk 1 from "+from2+" to "+to2);
}
else {
move(num-1,from2,to2,mid2);
System.out.println("move disk "+num+" from "+from2+" to "+to2);
move(num-1,mid2,from2,to2);
}
}
}
2. 這是一個排列的例子,它所做的工作是將輸入的一個字符串中的所有元素進(jìn)行排序并輸出,例如:你給出的參數(shù)是"abc" 則程序會輸出:
abc
acb
bac
bca
cab
cba
(1)算法的出口在于:low=high也就是現(xiàn)在給出的排列元素只有一個時。
(2)算法的逼近過程:先確定排列的第一位元素,也就是循環(huán)中i所代表的元素,
然后low+1開始減少排列元素,如此下去,直到low=high
public static void permute(String str) {
char[] strArray = str.toCharArray();
permute(strArray, 0, strArray.length - 1);
}
public static void permute(char[] list, int low, int high) {
int i;
if (low == high) {
String cout = "";
for (i = 0; i = high; i++)
cout += list[i];
System.out.println(cout);
} else {
for (i = low; i = high; i++) {
char temp = list[low];
list[low] = list[i];
list[i] = temp;
permute(list, low + 1, high);
temp = list[low];
list[low] = list[i];
list[i] = temp;
}
}
}
3。這是一個組合的例子,與上述的例子相似,只是它所做的工作是,輸出所給字符串中制定數(shù)目的元素的組合種類
(1)程序出口在于n=1,此時只要輸出目標(biāo)數(shù)組的所有元素即可
(2)逼近過程,當(dāng)n1 的時候,我們先取第一個元素放入目標(biāo)數(shù)組中,然后n-1,如此下去,最后出來。
import javax.swing.JOptionPane;
public class Combination {
/**
* @param args
*/
public static void main(String[] args) {
String input = JOptionPane.showInputDialog("please input your String: ");
String numString = JOptionPane.showInputDialog("please input the number of your Combination: ");
int num = Integer.parseInt(numString);
Combine(input, num);
}
private static void Combine(String input, int num) {
char[] a = input.toCharArray();
String b = "";
Combine(a, num, b, 0, a.length);
}
private static void Combine(char[] a, int num, String b, int low, int high) {
if (num == 0) {
System.out.println(b);
} else {
for (int i = low; i a.length; i++) {
b += a[i];
Combine(a, num - 1, b, i+1, a.length);
b=b.substring(0, b.length()-1);
}
}
}
}
一、遞歸算法基本思路:
Java遞歸算法是基于Java語言實現(xiàn)的遞歸算法。遞歸算法是一種直接或者間接調(diào)用自身函數(shù)或者方法的算法。遞歸算法實質(zhì)是把問題分解成規(guī)模縮小的同類問題的子問題,然后遞歸調(diào)用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規(guī)思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進(jìn)行思維。
二、遞歸算法解決問題的特點:
【1】遞歸就是方法里調(diào)用自身。
【2】在使用遞歸策略時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。
【3】遞歸算法代碼顯得很簡潔,但遞歸算法解題的運行效率較低。所以不提倡用遞歸設(shè)計程序。
【4】在遞歸調(diào)用的過程中系統(tǒng)為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等,所以一般不提倡用遞歸算法設(shè)計程序。
【5】在做遞歸算法的時候,一定把握出口,也就是做遞歸算法必須要有一個明確的遞歸結(jié)束條件。這一點是非常重要的。其實這個出口就是一個條件,當(dāng)滿足了這個條件的時候我們就不再遞歸了。
三、代碼示例:
public?class?Factorial?{
//this?is?a?recursive?function
int?fact(int?n){
if?(n==1)?return?1;
return?fact(n-1)*n;
}
}
public?class?TestFactorial?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
Factorial?factorial=new?Factorial();
System.out.println("factorial(5)="+factorial.fact(5));
}
}
代碼執(zhí)行流程圖如下:
此程序中n=5就是程序的出口。