藍橋杯 遞迴與迴圈

2021-07-22 07:50:27 字數 2667 閱讀 1752

致謝藍橋杯

有些語言沒有迴圈語句, 只能使用遞迴

我們來個案例, 非常簡單列印 從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級台階,有多少種不同的上...