致謝藍橋杯
有些語言沒有迴圈語句, 只能使用遞迴
我們來個案例, 非常簡單列印 從0到9 , 我們用迴圈很容易解決(當然遞迴也不難)
for (int i = 0; i < 9; i++)
先上遞迴**
public
static
void
f(int n)
我們這樣理解, 上級來了乙個任務 , 我要安排下級, 但是我也要做一些事情(列印) , 但是又不能無限制的安排下去(出口) .在n > 0的前提下進行遞迴, 之後列印n
那我們考慮這樣乙個問題: 如果我不想先遞迴再列印,我要先列印再遞迴呢 ? 是不是覺得不好構造呢? 看**
public
static
void
f2(int begin, int end)
system.out.println(begin);
f2(begin+1, end);
}
所以說:一旦發現遞迴無法表達, 說明我們的方法引數設定有問題!
出口:
if(…) f(..); 也就是在某種情況下就不進行遞迴了
也可以在遞迴之前做乙個檢查, 例如: if(…) return;
先上迴圈的做法
//累加和 迴圈做法
public
static
intaddall(int a)
return x;
}
首先我們看, 如果只有引數, 我們很難表達遞迴, 所以我們的引數需要修改, 這裡提供三種修改思路:1, 引數可以傳入(int a, begin)
我們可以先算第0項, 加上 begin+1 到 end的和. a[begin] + (begin+1 .... 結束)
public
static
intf1(int a, int begin)
int x = 0;
x = f1(a, begin + 1);
return a[begin] + x;
}
2, 引數可以傳入(int a, end)
同1中所說思路相同:
(0 ... end-1) + a[end]
public
static
intf2(int a, int end)
int x = 0;
x = f2(a, end-1);
return x + a[end];
}
3, 折半求和, 可以出入引數(int a, begin, end)
先求得mid=(begin+end)/2
在前後求和 [begin, mid) + [mid, end) 這裡注意end是包括的(傳引數時: f(a, a.length-1)
這裡的end是不包含的!!
主要是在判斷出口的地方, 兩種情況: 1, 總數為奇數 2, 總數為偶數
public
static
intf3(int a, int begin, int end)
if (end - begin == 2)
//求mid, 找到中間位置
int mid = (begin + end) / 2;
int x = f3(a, begin, mid);
int y = f3(a, mid, end);
return x + y;
}
問題: 比較兩個串的內容是否相等為了方便大家了解, 先列出系統做法:
public
static
boolean
issamestring(string s1, string s2)
分析一下: 可以先比較第0個字元, 剩下的交由」下級」 去完成啊
public
static
boolean
f(string s1, string s2)
//遞迴出口
if (s1.length() == 0)
if (s1.charat(0) != s2.charat(0))
return f(s1.substring(1), s2.substring(1));
}
其實遞迴呼叫並不是特殊的呼叫, 只是主調函式和被調函式相同. 每次呼叫都會有現場保護(保護當前方法的狀態) 並且壓棧, 之後在外圍方法執行完後出棧
藍橋杯 遞迴問題
深入遞推,逐級回退 遞迴問題 深搜dfs 在有條件的情況下試探各種情況 找出口 遞迴的終止條件 遞迴函式引數邊界值的界定 思想 1.src上的n 1個盤子移到medium 2.src剩下的乙個最大的盤子移到dest 3.medium上的n 1個盤子移到dest 把src最上面的乙個盤子移到dest ...
藍橋杯 遞迴 2 24
回形取數 藍橋杯 基礎練習 問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣...
藍橋杯備戰 遞迴篇
持續更新 二 李白喝酒 三 六角填數 小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上...