hakeの日記

Windows環境でプログラミングの勉強をしています。

PowerShell - 再帰関数

function fact($i) {
    if($i -eq 0) { 
        return 1
    } else {
        return $i * (fact ($i - 1))
    }
}

fact 5 # 120

2017/1/28追記 再帰回数に限界がある模様

Win10 PowerShell 5.1の環境で、以下の関数fooの引数が1000の場合は正常終了しましたが、5000の場合はエラーになりました。

function foo {
    param($i)

    #Write-Host $i
    if($i -eq 0){return 1}
    return (foo($i - 1)) + 1
}


Write-Host (Get-Date)
Write-Host "Result: $(foo(5000))" 
Write-Host (Get-Date)
PS C:\> C:\powershell\test.ps1
2017/01/28 21:47:03
Result: 1001
2017/01/28 21:47:04

PS C:\> C:\powershell\test.ps1
2017/01/28 21:47:18
呼び出しの深さのオーバーフローのため、スクリプトが失敗しました。
    + CategoryInfo          : InvalidOperation: (0:Int32) []、ParentContainsErrorRecordException
    + FullyQualifiedErrorId : CallDepthOverflow