演算法(1) 遞迴演算法1

2021-09-27 06:06:06 字數 2239 閱讀 6727

人理解迭代,神理解遞迴。綜上所述,還是不理解地好。

遞迴三要素:

1)明確遞迴的終止條件

2)給出遞迴終止時的處理辦法

3)提取重複的邏輯,縮小問題的規模

遞迴的兩種解決模式:

1)在遞去的過程中解決問題

function recursion(大規模input)

if (end_condition)

endelse

solve

recursion(小規模)

endend

solve在recursion前

2)在歸來的過程中解決問題

function recursion(大規模input)

if (end_condition)

endelse

recursion(小規模)

solve

endend

solve在recursion後

function f = factorial(n)

% ********** function ********** %

% function y=myfunction(a,b)

% 其中a,b是輸入函式的引數,y是函式返回的值。

% 當需要返回多個值時,可以將y看作乙個陣列,

% 或者直接將函式的開頭寫成如

% function [x,y]=myfunction(x,y)的形式

if n == 0

f = 1;

return;

else

f = n * factorial(n - 1); % recursive

return;

endend

function = hannuota( n,  a,  b,  c)

if(n == 1)

fprintf('move sheet %d from %c to %c\n', n, a, c);

else

hannuota(n-1, a, c, b);

fprintf('move sheet %d from %c to %c\n', n, a, c);

hannuota(n-1, b, a, c);

endend

n = input('請輸入盤數: \n');

hannuota(n, 'a', 'b', 'c');

function m = rotate(m)

%% ********** end_condition ********** %%

[n,m] = size(m)

if n ~= m

error('it is not a square matrix')

elseif n == 0 || n == 1

return;

% ********** break continue return ********** %

% break直接跳出該層迴圈

% continue直接進入該層迴圈的下一次迭代

% return退出程式或函式返回

end%% ********** rotate ********** %%

% 講矩陣m外圍一圈剝離,寫成乙個行向量

a = [m(1,1:end) m(2:end,end)' m(end,end-1:-1:1) m(end-1:-1:2,1)'];

% 將第乙個數移到最後一位

a = [a a(1)];

% 將第一位取空,實現迴圈旋轉

a(1) = ;

m(1,1:end) = a(1:n);

m(2:end,end) = a(n + 1:2 * n - 1);

m(end,end-1:-1:1) = a(2 * n:3 * n - 2);

m(end-1:-1:2,1) = a (3 * n - 1:4 * n - 4);

%% ********** recursive ********** %%

m(2:end - 1,2:end - 1) = rotate(m(2:end - 1,2:end - 1));

m = 1:9; m = reshape(m,3,3); m = m';

rotate(m);

演算法基礎 遞迴(1)

遞迴的基本概念乙個函式呼叫其自身,就是遞迴。例1 求n 的遞迴函式 int factorial int n 遞迴的作用 替代多重迴圈 解決本來就是用遞迴型式定義的問題 將問題分解為規模更小的子問題進行求解 例2 漢諾塔問題 void hanoi int n,char src,char mid,cha...

2013 11 13 遞迴演算法 1

1 對於遞迴演算法的認識,可以簡單的歸納為 直接或者間接呼叫其本身的演算法稱之為遞迴演算法。一般而言,遞迴演算法表示式簡單,易理解,但要寫出遞迴演算法之前,我們需要先理清每個遞迴函式的非遞迴函式的定義,而且一定要有跳出遞迴的邊界條件 這個很重要 2 簡單例子 1 int function int n...

演算法學習1 遞迴

遞迴 乙個函式呼叫其自身。不同名字空間上的迴圈。注意 使用遞迴策略時,必須有乙個明確的遞迴結束條件,否則遞迴將會無限進行下去。參考 中國大學mooc 演算法基礎 話歪之地的部落格 int factorial int n else 執行f 3 2 f 3 5 f 2 2 f 2 5 f 1 2 f 1...