Files
hello-algo/ja/codes/swift/chapter_computational_complexity/recursion.swift
Yudong Jin d7b2277d2b Re-translate the Japanese version (#1871)
* Retranslate Japanese docs with GPT-5.4

* Retranslate Japanese code with GPT-5.4
2026-03-30 07:30:15 +08:00

80 lines
2.0 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* File: recursion.swift
* Created Time: 2023-09-02
* Author: nuomi1 (nuomi1@qq.com)
*/
/* 再帰 */
func recur(n: Int) -> Int {
// 終了条件
if n == 1 {
return 1
}
// 再帰:再帰呼び出し
let res = recur(n: n - 1)
// 帰りがけ:結果を返す
return n + res
}
/* 反復で再帰を模擬する */
func forLoopRecur(n: Int) -> Int {
// 明示的なスタックを使ってシステムコールスタックを模擬する
var stack: [Int] = []
var res = 0
// 再帰:再帰呼び出し
for i in (1 ... n).reversed() {
// 「スタックへのプッシュ」で「再帰」を模擬する
stack.append(i)
}
// 帰りがけ:結果を返す
while !stack.isEmpty {
// 「スタックから取り出す操作」で「帰り」をシミュレート
res += stack.removeLast()
}
// res = 1+2+3+...+n
return res
}
/* 末尾再帰 */
func tailRecur(n: Int, res: Int) -> Int {
// 終了条件
if n == 0 {
return res
}
// 末尾再帰呼び出し
return tailRecur(n: n - 1, res: res + n)
}
/* フィボナッチ数列:再帰 */
func fib(n: Int) -> Int {
// 終了条件 f(1) = 0, f(2) = 1
if n == 1 || n == 2 {
return n - 1
}
// f(n) = f(n-1) + f(n-2) を再帰的に呼び出す
let res = fib(n: n - 1) + fib(n: n - 2)
// 結果 f(n) を返す
return res
}
@main
enum Recursion {
/* Driver Code */
static func main() {
let n = 5
var res = 0
res = recursion.recur(n: n)
print("\n再帰関数による総和結果 res = \(res)")
res = recursion.forLoopRecur(n: n)
print("\n反復で再帰をシミュレートした総和結果 res = \(res)")
res = recursion.tailRecur(n: n, res: 0)
print("\n末尾再帰関数による総和結果 res = \(res)")
res = recursion.fib(n: n)
print("\nフィボナッチ数列の第 \(n) 項は \(res)")
}
}