相关文章推荐
魁梧的烈马  ·  How to use ssl/tls in ...·  1 年前    · 
果断的土豆  ·  将Unity ...·  1 年前    · 
淡定的弓箭  ·  WPF 静态资源 ...·  1 年前    · 
更厲害的是, sum() 可以接受一個「或」兩個參數! 如果 sum() 發現使用者只給了一個參數,就自動設定第二個參數的值; 換句話說, sum(A) 就等於 sum(A,1) 。 這是 Matlab 語言比其他大多數程式語言 (例如 C 語言) 方便的地方。 使用者自訂函式也可以享受這種便利。 繼續以 collatz.m 為例,我們修改它, 讓使用者可以自己決定最多迭代次數。 以前,我們寫 while (x>1) & (n<1000) 亦即最多迭代次數是 1000, 但是以下程式令最多迭代次數為 ITER, 讓使用者有機會指定 ITER,如果沒有指定,才設定 ITER=1000 。 整個原始碼寫在這裡,為了方便閱讀,我們將新加入的原始碼用藍色字型顯示。

function n = collatz(x, arg2)
% Usage: collatz(x, [arg2])
% Here x is a positive integer, let it be x_0 and generate the
% Collatz sequence until the first n such that x_n = 1.  Return n.
% arg2, which is optional, specifies the max number of iterations.
% Shann 2004-04-29
% Check input
if (nargin == 2)
    ITER = arg2;
elseif (nargin == 1)
    ITER = 1000;
    disp(['Error: must have one or two input arguments.']);
    return;
% Input validation: is a scalar, is an integer, is positive.
if (length(x) > 1)
    disp(['Error: input must be a scalar.']);
    return;
if (floor(x) ~= x)
    disp(['Error: input must be an integer.']);
    return;
if (x < 1)
    disp(['Error: input must be a positive integer.']);
    return;
% Let x be x_0, start the Collatz sequence x_n, n=1,2,3...
% until the first x_n = 1
while (x>1) & (n<ITER)
    n = n+1;
    if (rem(x,2))
        x = 3*x+1;
        x = x/2;
首先,在宣告的時候,我們令 collatz() 可能獲得第二個參數,
給它取個簡單的名字 arg2 (argument 2)。
然後在線上說明文字中解釋 arg2 的意義。
主要的改變在原始碼的第二段,我們使用 Matlab 內建函式 nargin()
(number of input arguments) 來詢問真正傳來了幾個參數?
如果是 2 個,令 ITER=arg2,
否則檢查是否傳來 1 個參數,如果是的話就沒有 arg2,
所以令 ITER=1000。
如果連一個都沒有傳來,就是錯誤,中斷函式。
其實 nargin() 並不需要任何參數,
因此使用的時候不需要寫括號。
但是我還是寫 nargin(),
那一對空括號只是一種書寫的習慣,表示 nargin 是函式而不是變數、也不是保留字。
最後我們把 (n<1000) 改成了 (n<ITER)。
完工。存檔之後,試試看
>> collatz(3)
答案還是 7,而
>> collatz(3,100)
答案也是 7。不過
>> collatz(3,5)
答案就變成 5 了。
  • 在這一節裡,您多學到一個內建函式與一個保留字, 請指出來。
  • 修改這一節的 collatz() 函式, 使得萬一 n 到達 ITER 而 x 尚未出現 1 的話, 正常結束程式並送回答案, 但是顯示一句警告訊息 Warning: number of iteration exceeded.
  •