|
发表于 2011-12-27 20:57:17
|
显示全部楼层
再帰呼出し 递归调用
□再帰呼出しの例
C言語での例:
/* 階乗 n! を計算する */
int fact(int n) {
if (n == 0) return 1; /* 脱出条件。0! は 1 である */
return fact(n - 1) * n; /* n! は (n-1)! に n を乗じたもの。再帰呼出し */
}
JavaScript (ECMAScript) での例:
function fact(n) {
return n ? n * fact(n - 1) : 1;
}
// JavaScript では arguments.callee プロパティ(自分自身を指す)
// によって、無名再帰を書くことができる。
var fact = function(n){
return n ? n * arguments.callee(n - 1) : 1;
};
Lispでの例:
;;; 階乗 n! を計算する
(defun fact (n)
(or (and (zerop n) 1) ; 脱出条件。0! は 1 である
(* n (fact (1- n))))) ; n! は (n-1) に n を乗じたもの。再帰呼出し
VBAでの例:
Rem 階乗 n! を計算する
Function fact(n) As Long
Dim n As Long
If n = 0 Then ' 脱出条件
fact = 1 ' 0! は 1 である
Exit Function
End If
fact = fact(n - 1) * n ' n! は (n-1) に n を乗じたもの。再帰呼出し
End Function
Pascalでの例;
function fact(n : integer): integer;
begin
if n = 0 then {脱出条件。0! は 1 である}
fact := 1
else
fact := fact(n - 1) * n; {n! は (n-1)!*n である。再帰呼出し}
end
end;
|
|