人理解迭代,神理解遞迴。綜上所述,還是不理解地好。
遞迴三要素:
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...