階乗計算

30分プログラム、その761。
特にやることも思いつかないので、階乗を計算してみました。一応、末尾再帰にしてみました。

使い方

$ perl fact.pl
1
2
3
5
8
13
21
34
55
89
144

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
use strict;
use warnings;
use Data::Dumper;

sub facti($$$){
    my ($n, $prev, $current) = @_;
    if($n == 0) {
	$current;
    }else{
	@_ = ($n - 1, $current, $prev + $current);
	goto &facti;
    }
}

sub fact($){
    my ($n) = @_;
    facti $n, 1, 1;
}

for(0..10){
    print fact($_),"\n";
}