(1).字串的左旋和右旋
public
static string reverse0
(string str,
int begin,
int end)
return string.
copyvalueof
(ch)
;}
這是乙個逆置函式,然後左旋就是先進行部分逆置,然後在整體逆置;
而 右旋則相反,先進行整體逆置,在部分逆置;
左旋:
public
static
void
reverseleft
(string str,
int n)
int left=0;
int leftend=n-1;
int right=n;
int rightend=str.
length()
-1; str=
reverse0
(str,left,leftend)
; str=
reverse0
(str,right,rightend)
; str=
reverse0
(str,left,rightend)
; system.out.
println
(str)
;}
右旋:public
static
void
reverseright
(string str,
int n)
int left=0;
int leftend=n-1;
int right=n;
int rightend=str.
length()
-1; str=
reverse0
(str,left,rightend)
; str=
reverse0
(str,left,leftend)
; str=
reverse0
(str,right,rightend)
; system.out.
println
(str)
;}
1.遞迴的介紹:
遞迴做為一種演算法在程式語言中廣泛應用。遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
2.遞迴的使用:
最常見的斐波那契數列求第n項的值 如果用for迴圈寫:
public
static
intfibona
(int n)
}else
return array[n-1]
;}
如果用遞迴寫:
public
static
intfibonac
(int n)
else
}
對於這個題,可以看出,用for迴圈的寫的話,**長而複雜,而且不容易理解;
而用遞迴去寫,**只有乙個if else判斷 ,相對**較少,而且容易理解;
對於比較熟悉的二分查詢來說
用迴圈寫:
public
static
intbinnary
(int
array,
int key)
while
(a<=b)
else
else}}
return-1
;}
而用遞迴去寫:
public
static
intbinnary1
(int
array,
int begin,
int end,
int key)
else
else}}
return-1
;}
兩者**量看起來差不多,我個人覺得 對於二分查詢來說,遞迴和迴圈思想都是一樣的,都是要用帶查詢的值去和陣列中間值去比較然後繼續找區間比較,遞迴比循壞看起來更複雜,和難以理解。
遞迴好處:**更簡潔清晰,可讀性更好
遞迴壞處:由於遞迴需要系統堆疊,所以空間消耗要比非遞迴**要大很多。而且,如果遞迴深度太大,可能系統撐不住。
棧如果溢位,異常資訊是什麼?
遞迴演算法及DFS搜尋的應用
遞迴演算法,說白了就是程式呼叫自身的程式設計技巧的一種演算法。它能更好的實現一種反覆執行的過程 呼叫自身的方式 能讓一些反覆迴圈的問題變得簡單化,使之更好的讓計算機運算出結果。遞迴需滿足2個條件 1 有反覆執行的過程 呼叫自身 2 有跳出反覆執行過程的條件 遞迴出口 一般來說,遞迴需要有邊界條件 遞...
Java之遞迴演算法及應用
1 什麼叫遞迴?遞迴就是無限呼叫自身的函式,每次呼叫會改動乙個關鍵變數,直到該變數達到邊界時,不再呼叫。即將大規模問題分解為小規模問題解決。2 遞迴演算法的應用 1 遞迴求和 1 2 3 100 public static int sumnum int n else public static vo...
遞迴的應用
遞迴是指函式 過程 子程式在執行過程中直接或間接的呼叫自身而產生的重入現象。在定義乙個過程或函式時出現呼叫本過程或本函式的成分,稱為遞迴。若呼叫自身,稱為直接遞迴。若過程 或函式p呼叫過程或函式q,而q又呼叫p,稱為間接遞迴。在以下三種情況下,需要用到遞迴的方法。1.定義是遞迴的 有些數學公式 數列...