6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで再帰呼び出し関数を使ってみる

Posted at

はじめに

なかなか使用しない(私だけ?)PHPでの再帰呼び出し関数を作ってみました。

サンプルソースの概要

数字を英語表記に変更するプログラムです。
英語表記は1〜19までは固有ルールですが、20以降であれば汎用的な流れで処理することが可能です。
この特性を使って、再帰呼び出しで実現してみます。
※今回は100の位までを想定しています。

サンプルソース

hosomitakeshi.php
<?php
// メイン関数呼び出し
yasunorihayashi($argv[1]);

// 再帰呼び出しをするメイン関数
function yasunorihayashi(int $value) 
{
    if (floor($value / 100) >= 1) {
        echo sprintf('%s hundred ', yasunorihayashi(floor($value / 100)));
        yasunorihayashi($value % 100);
    } elseif (floor($value / 10) >= 2) {
        changeX0($value);
        echo ' ';
        yasunorihayashi($value % 10);
    } elseif (floor($value / 10) == 1) {
        change1X($value);
    } else {
        changeX($value);
    }
    return;
}

// teen
function change1X(int $value)
{
    switch ($value % 10) {
        case 1:
            echo 'eleven';
            break;
        case 2:
            echo 'twelve';
            break;
        case 3:
            echo 'thirteen';
            break;
        case 4:
            echo 'fourteen';
            break;
        case 5:
            echo 'fifteen';
            break; 
        case 6:
            echo 'sixteen';
            break;
        case 7:
            echo 'seventeen';
            break;
        case 8:
            echo 'eighteen';
            break;
        case 9:
            echo 'nineteen';
            break;
        default:
            echo 'abeshi';
            exit();
    }
    return;
}

// 10の位
function changeX0(int $value)
{
    switch (floor($value / 10)) {
        case 2:
            echo 'twen';
            break;
        case 3:
            echo 'thir';
            break;
        case 4:
            echo 'for';
            break;
        case 5:
            echo 'fif';
            break; 
        case 6:
            echo 'six';
            break;
        case 7:
            echo 'seven';
            break;
        case 8:
            echo 'eigh';
            break;
        case 9:
            echo 'nine';
            break;
        default:
            echo 'abeshi';
            exit();
    }
    echo 'ty';
    return;
}

// 1の位
function changeX(int $value)
{
    switch ($value) {
        case 0:
            break;
        case 1:
            echo 'one';
            break;
        case 2:
            echo 'two';
            break;
        case 3:
            echo 'three';
            break;
        case 4:
            echo 'four';
            break;
        case 5:
            echo 'five';
            break; 
        case 6:
            echo 'six';
            break;
        case 7:
            echo 'seven';
            break;
        case 8:
            echo 'eight';
            break;
        case 9:
            echo 'nine';
            break;
        default:
            echo 'abeshi';
            exit();
    }
    return;
}

実行例

実行例
$ php ./hosomitakeshi.php 24
twenty four
$ php ./hosomitakeshi.php 57
fifty seven
$ php ./hosomitakeshi.php 146
one hundred forty six 
$ php ./hosomitakeshi.php 457
four hundred fifty seven
$ php ./hosomitakeshi.php 0
$

応用すれば、1000以上の数値も対応することが可能です。
※0は考慮されていなかったり、色々改善点はあります…

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?