凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46600
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

επιστημη様のエントリより有名な、あまりに有名な

再帰処理で書くところを再帰を使わないで書き換えるとどうなるかという話題です。

木構造を考えたとき、その枝を走査する際に再帰で処理を書くと書きやすいのですが、 他にもいくつかアプローチの仕方があるので紹介しましょう。

サンプルコード

まずは木構造のノードの抽象クラスからです。

import java.util.LinkedList;
import java.util.List;

/** ノードの抽象クラス */
public abstract class Node {
  /** 名前 */
  private String name;

  /** コンストラクタ */
  public Node(String name) {
    this.name = name;
  }
  /** 名前の取得 */
  public String getName() {
    return this.name;
  }

  /** toString()をオーバーライドして名前が出力されるようにしておく */
  @Override
  public String toString() {
    return this.getName();
  }

  /** Compositeパターンによるノードの出力処理 */
  public abstract void printNode();

  /** Visitorの受け入れ処理 */
  public abstract void accpent(Visitor visitor);

  /** Visitorのインターフェース */
  public static interface Visitor {
    /** 単数形ノード */
    void visit(SimpleNode node);
    /** 複数形ノード */
    void visit(MultipleNode node);
  }
  /** ノード名を出力するVistorの実装 */
  public static class PrintVisitor implements Visitor {
    /** 単数形ノード */
    @Override
    public void visit(SimpleNode node) {
      System.out.println(node);
    }
    /** 複数形ノード */
    @Override
    public void visit(MultipleNode node) {
      System.out.println(node);
      for (Node subNode : node.getChildlen()) {
        subNode.accpent(this);
      }
    }
  }

  /** 再帰処理によるノードの出力処理 */
  public static void 再帰(Node node) {
    System.out.println(node.getName());

    if (node instanceof MultipleNode) {
      MultipleNode multipleNode = (MultipleNodenode;
      for (Node subNode : multipleNode.getChildlen()) {
        再帰(subNode);
      }
    }
  }

  /**
   * 再帰を使わず、Listのループで処理する方式
   */
  public static void list方式(Node rootNode) {
    List<Node> nodeList = new LinkedList<Node>();
    nodeList.add(rootNode);

    for (int i=0; i<nodeList.size(); i++) {
      Node node = nodeList.get(i);
      System.out.println(node.getName());

      // 複数形の場合は子ノードを処理対象Listの次のインデックスに加える
      if (node instanceof MultipleNode) {
        MultipleNode multipleNode = (MultipleNodenode;
        for (Node subNode : multipleNode.getChildlen()) {
          int index = i + 1;
          if (index < nodeList.size()) {
            nodeList.add(index, subNode);
          else {
            nodeList.add(subNode);
          }
        }
      }
    }
  }
}

次は木の末端、配下に子を持たないノード。

/** 単数形のノード */
public class SimpleNode extends Node {

  /** コンストラクタ */
  public SimpleNode(String name) {
    super(name);
  }

  /** Compositeパターンによるノードの出力処理 */
  @Override
  public void printNode() {
    System.out.println(this);
  }

  /** Visitorの受け入れ */
  public void accpent(Visitor visitor) {
    visitor.visit(this);
  }
}

最後に配下に子を持つ枝のノード。

/** 複数形のノード */
public class MultipleNode extends Node {
  /** 子ノード */
  private List<Node> childlen;

  /** コンストラクタ */
  public MultipleNode(String name) {
    super(name);
    this.childlen = new ArrayList<Node>();
  }

  /** 子ノードの追加 */
  public void addChild(Node node) {
    this.childlen.add(node);
  }

  /** 子ノードのListを返す */
  public List<Node> getChildlen() {
    return this.childlen;
  }

  /** Compositeパターンによるノードの出力処理 */
  @Override
  public void printNode() {
    System.out.println(this);
    for (Node subNode : this.getChildlen()) {
      subNode.printNode();
    }
  }

  /** Visitorの受け入れ */
  public void accpent(Visitor visitor) {
    visitor.visit(this);
  }
}

ソース解説

複合的に書いたのでごちゃ混ぜになっていますが、ざっくりと解説です。

本サンプルはノードを走査して名称を表示するだけのシンプルなものです。 基本的にはGoFデザインパターンのCompositeパターンを利用しています。 抽象クラスNodeに対し、子を持たないSimpleNodeと子を持つMultipleNodeの2種類の実装が存在します。

再帰処理

再帰処理はこういった継承関係を持つデータ構造だと扱いにくく、その無理がinstanceof演算子に現れています。

  /** 再帰処理によるノードの出力処理 */
  public static void 再帰(Node node) {
    System.out.println(node.getName());

    if (node instanceof MultipleNode) {
      MultipleNode multipleNode = (MultipleNodenode;
      for (Node subNode : multipleNode.getChildlen()) {
        再帰(subNode);
      }
    }
  }

上位のクラスで複数の子を持つことが確定しているのであればこのinstanceofが不要です。 単複同型で扱おうというCompositeとは相性が悪いという点はありますが、 型の違いによるポリモフィズムを多用しないのであれば、再帰でも問題なく処理が書けます。

Listのループによる書き換え

再帰を敢えて使わないのであれば、list方式()メソッドのような手法も使うことができます。 これは、Listを作業用のワークエリアとして使っており、Listに処理の対象を追加しつつ、 forループで順に処理していくというトリッキーなコードになっています。

深さ優先にするためにListへのadd部分がややこしくなっていますが、 幅優先探査であればListの末尾にaddしていくことで比較的シンプルな記述になります。

ループをまわしているListにどんどん追加していくため、for - each構文だとうまく処理できません。 一応こういった書き方も出来るよ、という程度にとどめておいた方がよいのではないでしょうか。

Compositeパターンによる書き換え

Compositeパターンでは木構造が非常に単純に処理できます。 printNode()メソッドが該当処理なのですが、抽象クラスNodeで宣言されており、 SimpleNodeとMultipleNodeで別々の実装が書かれています。

  /** Compositeパターンによるノードの出力処理 */
  @Override
  public void printNode() {
    System.out.println(this);
  }

とSimpleNodeの実装は自身の名称を出力するだけですが、

  /** Compositeパターンによるノードの出力処理 */
  @Override
  public void printNode() {
    System.out.println(this);
    for (Node subNode : this.getChildlen()) {
      subNode.printNode();
    }
  }

MultipleNodeでは自身の出力と、各子ノードの出力のループが記述されています。 子ノードはその実態がSimpleNodeか、MultipleNodeかでポリモーフィズムにより分岐するしかけです。

Compositeパターンの場合、Nodeの実装の種類が増えた際に追加の実装クラスを定義するだけで拡張が行えます。

Visitorパターンによる書き換え

VisitorパターンはGoFデザインパターンの中でもっとも難解なのではないかと思います。 動きを追いかけるのが難しいのですが、Visitorインターフェースが定義され、PrintVisitorクラスが実体となります。

VisitorクラスではNodeの種類が増えたりした場合には大きな修正コストがかかります。 Visitorインターフェースの変更と、それにともなう各Visitorの実装クラスの修正が必要です。 しかし、Visitorの実装を新たに作るだけで木構造をたどりながら行う処理のバリエーションを容易に増やせます

今の場合、ノード名を出力するという代物でしたが、Nodeクラスに他にもフィールドがあった場合、 木構造を手繰りながらやる処理というのは多様であると考えら得ます。 Visitorパターンはこの部分を用意に拡張することができるのです。

Compositeパターンの場合はこういった処理ごとにNodeクラスにメソッドを追加し、 Nodeの実装クラスにも手を加える必要があります。

CompositeパターンはNodeの種類を増やすのが簡単、Visitorパターンは木構造を 手繰りながら行う処理を増やすのが簡単、という特徴があります。

このように、同じ処理をいろんな手法で書くことで、それぞれの特色がより鮮明に見えてくるのではないでしょうか。

投稿日時 : 2007年9月17日 20:36
コメント
  • # 再帰による解決
    かつのりの日記2
    Posted @ 2007/09/17 23:35
    再帰による解決
  • # re: 再帰とCompositeとVisitorと
    melt
    Posted @ 2007/09/18 0:03
    >処理のバリエーションを容易に増やせます。
    個人的には、Visitor が行う処理のバリエーションが増えると、Visitor が Acceptor に対して要求するメソッドも増えることが多いので、そんなに容易じゃないような気が……。
  • # re: 再帰とCompositeとVisitorと
    凪瀬
    Posted @ 2007/09/18 13:20
    確かに、完全に後付けで増やすのは難しいかもしれませんね。
    あらかじめ構造を辿りつつ、コレとコレとコレの処理が必要だなって全貌が見えていて、その処理の違いをVisitorの実装classの違いで表現するというなら綺麗に書けるんだけど。

    後になって構造を辿るXXな処理が欲しいなぁ、と思ってVisitorあるじゃん、これの実装でいけるかなって調べたらパラメータが足りないとかアクセス権がないとかそういう理由でAcceptorに手を入れることになるのでしょうな。
  • # re: 再帰とCompositeとVisitorと
    siokoshou
    Posted @ 2007/09/20 23:15
    > VisitorパターンはGoFデザインパターンの中でもっとも難解なのではないかと思います。

    激同!
    きらいです…。毎度忘れるし…。
  • # hoxton insurance
    jubilee insurance
    Posted @ 2010/09/24 23:31
    Hey Krystal, cool story bro?!

    Shaun
  • # kono insurance
    hastings car insurance
    Posted @ 2010/09/25 18:01
    Oliver FTW??

  • # incircle insurance
    mcginnis malpractice insurance
    Posted @ 2010/09/26 12:14
    The greatest blog that I have read ever???

    Monte
  • # life insurance companies
    kaiser permanente insurance
    Posted @ 2010/09/27 8:04
    Great read! Maybe you could do a follow up on this topic!

    Sincerest regards,
    Harlan
  • # I am genuinely grateful to the owner of this site who has shared this impressive article at at this time.
    I am genuinely grateful to the owner of this site
    Posted @ 2021/08/30 21:11
    I am genuinely grateful to the owner of this site who has shared this impressive article
    at at this time.
  • # I am genuinely grateful to the owner of this site who has shared this impressive article at at this time.
    I am genuinely grateful to the owner of this site
    Posted @ 2021/08/30 21:12
    I am genuinely grateful to the owner of this site who has shared this impressive article
    at at this time.
  • # I am genuinely grateful to the owner of this site who has shared this impressive article at at this time.
    I am genuinely grateful to the owner of this site
    Posted @ 2021/08/30 21:13
    I am genuinely grateful to the owner of this site who has shared this impressive article
    at at this time.
  • # I am genuinely grateful to the owner of this site who has shared this impressive article at at this time.
    I am genuinely grateful to the owner of this site
    Posted @ 2021/08/30 21:14
    I am genuinely grateful to the owner of this site who has shared this impressive article
    at at this time.
  • # You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your views on this web site.
    You have made some decent points there. I looked o
    Posted @ 2021/09/01 9:42
    You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your
    views on this web site.
  • # You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your views on this web site.
    You have made some decent points there. I looked o
    Posted @ 2021/09/01 9:43
    You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your
    views on this web site.
  • # You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your views on this web site.
    You have made some decent points there. I looked o
    Posted @ 2021/09/01 9:44
    You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your
    views on this web site.
  • # You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your views on this web site.
    You have made some decent points there. I looked o
    Posted @ 2021/09/01 9:45
    You have made some decent points there. I looked on the web for additional information about the issue and found most people will go along with your
    views on this web site.
  • # Hmm is anyone else experiencing problems with the images on this blog loading? I'm trying to find out if its a problem on my end or if it's the blog. Any feedback would be greatly appreciated.
    Hmm is anyone else experiencing problems with the
    Posted @ 2021/09/03 0:19
    Hmm is anyone else experiencing problems with the images on this blog
    loading? I'm trying to find out if its a problem on my end or
    if it's the blog. Any feedback would be greatly appreciated.
  • # Excellent article! We will be linking to this particularly great post on our website. Keep up the good writing.
    Excellent article! We will be linking to this part
    Posted @ 2021/09/04 20:44
    Excellent article! We will be linking to this particularly great post on our website.

    Keep up the good writing.
  • # Excellent article! We will be linking to this particularly great post on our website. Keep up the good writing.
    Excellent article! We will be linking to this part
    Posted @ 2021/09/04 20:45
    Excellent article! We will be linking to this particularly great post on our website.

    Keep up the good writing.
  • # Excellent article! We will be linking to this particularly great post on our website. Keep up the good writing.
    Excellent article! We will be linking to this part
    Posted @ 2021/09/04 20:46
    Excellent article! We will be linking to this particularly great post on our website.

    Keep up the good writing.
  • # Excellent article! We will be linking to this particularly great post on our website. Keep up the good writing.
    Excellent article! We will be linking to this part
    Posted @ 2021/09/04 20:47
    Excellent article! We will be linking to this particularly great post on our website.

    Keep up the good writing.
  • # Hello, i think that i noticed you visited my blog so i got here to go back the choose?.I am attempting to in finding things to enhance my website!I guess its adequate to use a few of your concepts!!
    Hello, i think that i noticed you visited my blog
    Posted @ 2021/09/06 5:27
    Hello, i think that i noticed you visited my blog so i got here to go
    back the choose?.I am attempting to in finding things to
    enhance my website!I guess its adequate to use a few of your concepts!!
  • # Hello, i think that i noticed you visited my blog so i got here to go back the choose?.I am attempting to in finding things to enhance my website!I guess its adequate to use a few of your concepts!!
    Hello, i think that i noticed you visited my blog
    Posted @ 2021/09/06 5:28
    Hello, i think that i noticed you visited my blog so i got here to go
    back the choose?.I am attempting to in finding things to
    enhance my website!I guess its adequate to use a few of your concepts!!
  • # Hello, i think that i noticed you visited my blog so i got here to go back the choose?.I am attempting to in finding things to enhance my website!I guess its adequate to use a few of your concepts!!
    Hello, i think that i noticed you visited my blog
    Posted @ 2021/09/06 5:29
    Hello, i think that i noticed you visited my blog so i got here to go
    back the choose?.I am attempting to in finding things to
    enhance my website!I guess its adequate to use a few of your concepts!!
  • # Hello, i think that i noticed you visited my blog so i got here to go back the choose?.I am attempting to in finding things to enhance my website!I guess its adequate to use a few of your concepts!!
    Hello, i think that i noticed you visited my blog
    Posted @ 2021/09/06 5:30
    Hello, i think that i noticed you visited my blog so i got here to go
    back the choose?.I am attempting to in finding things to
    enhance my website!I guess its adequate to use a few of your concepts!!
  • # What's up, all is going perfectly here and ofcourse every one is sharing information, that's really good, keep up writing.
    What's up, all is going perfectly here and ofcours
    Posted @ 2021/09/06 8:58
    What's up, all is going perfectly here and
    ofcourse every one is sharing information, that's really good, keep up writing.
  • # What's up, all is going perfectly here and ofcourse every one is sharing information, that's really good, keep up writing.
    What's up, all is going perfectly here and ofcours
    Posted @ 2021/09/06 8:59
    What's up, all is going perfectly here and
    ofcourse every one is sharing information, that's really good, keep up writing.
  • # What's up, all is going perfectly here and ofcourse every one is sharing information, that's really good, keep up writing.
    What's up, all is going perfectly here and ofcours
    Posted @ 2021/09/06 9:00
    What's up, all is going perfectly here and
    ofcourse every one is sharing information, that's really good, keep up writing.
  • # What's up, all is going perfectly here and ofcourse every one is sharing information, that's really good, keep up writing.
    What's up, all is going perfectly here and ofcours
    Posted @ 2021/09/06 9:01
    What's up, all is going perfectly here and
    ofcourse every one is sharing information, that's really good, keep up writing.
  • # Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i can assume you're an expert on this subject. Well with your permission allow me to grab your RSS feed to keep up to date with forthcoming post. Tha
    Simply want to say your article is as astonishing.
    Posted @ 2021/09/12 21:09
    Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i
    can assume you're an expert on this subject.

    Well with your permission allow me to grab your RSS feed to keep
    up to date with forthcoming post. Thanks a million and please keep up the rewarding work.
    quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i can assume you're an expert on this subject. Well with your permission allow me to grab your RSS feed to keep up to date with forthcoming post. Tha
    Simply want to say your article is as astonishing.
    Posted @ 2021/09/12 21:10
    Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i
    can assume you're an expert on this subject.

    Well with your permission allow me to grab your RSS feed to keep
    up to date with forthcoming post. Thanks a million and please keep up the rewarding work.
    quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i can assume you're an expert on this subject. Well with your permission allow me to grab your RSS feed to keep up to date with forthcoming post. Tha
    Simply want to say your article is as astonishing.
    Posted @ 2021/09/12 21:11
    Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i
    can assume you're an expert on this subject.

    Well with your permission allow me to grab your RSS feed to keep
    up to date with forthcoming post. Thanks a million and please keep up the rewarding work.
    quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i can assume you're an expert on this subject. Well with your permission allow me to grab your RSS feed to keep up to date with forthcoming post. Tha
    Simply want to say your article is as astonishing.
    Posted @ 2021/09/12 21:12
    Simply want to say your article is as astonishing. The clearness in your post is simply spectacular and i
    can assume you're an expert on this subject.

    Well with your permission allow me to grab your RSS feed to keep
    up to date with forthcoming post. Thanks a million and please keep up the rewarding work.
    quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # naturally like your website however you have to test the spelling on quite a few of your posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surg
    naturally like your website however you have to te
    Posted @ 2021/09/14 7:23
    naturally like your website however you have to test the spelling on quite a few of your
    posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery
  • # naturally like your website however you have to test the spelling on quite a few of your posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surg
    naturally like your website however you have to te
    Posted @ 2021/09/14 7:24
    naturally like your website however you have to test the spelling on quite a few of your
    posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery
  • # naturally like your website however you have to test the spelling on quite a few of your posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surg
    naturally like your website however you have to te
    Posted @ 2021/09/14 7:25
    naturally like your website however you have to test the spelling on quite a few of your
    posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery
  • # naturally like your website however you have to test the spelling on quite a few of your posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surg
    naturally like your website however you have to te
    Posted @ 2021/09/14 7:26
    naturally like your website however you have to test the spelling on quite a few of your
    posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I will surely come back again. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery
  • # ivermectin buy australia
    MarvinLic
    Posted @ 2021/09/28 14:21
    ivermectin usa http://stromectolfive.online# stromectol covid 19
  • # ivermectin usa price
    DelbertBup
    Posted @ 2021/11/01 7:23
    ivermectin 1 topical cream http://stromectolivermectin19.online# buy ivermectin
    ivermectin 6 mg tablets
  • # buy ivermectin pills
    DelbertBup
    Posted @ 2021/11/02 2:29
    ivermectin 1 cream generic http://stromectolivermectin19.online# ivermectin tablets order
    ivermectin 6mg
  • # ivermectin brand
    DelbertBup
    Posted @ 2021/11/04 0:08
    ivermectin 80 mg http://stromectolivermectin19.online# ivermectin 200mg
    buy ivermectin pills
  • # sildenafil 20 mg tablet uses http://viasild24.online/
    Nyusjdh
    Posted @ 2021/12/07 19:23
    sildenafil 20 mg tablet uses http://viasild24.online/
  • # careprost bimatoprost ophthalmic best price
    Travislyday
    Posted @ 2021/12/13 7:48
    https://plaquenils.com/ plaquenil 200mg tablets 100
  • # bimatoprost generic
    Travislyday
    Posted @ 2021/12/14 3:38
    http://stromectols.com/ buy ivermectin nz
  • # buy careprost in the usa free shipping
    Travislyday
    Posted @ 2021/12/14 22:45
    http://baricitinibrx.online/ baricitinib price
  • # bimatoprost ophthalmic solution careprost
    Travislyday
    Posted @ 2021/12/15 16:27
    http://baricitinibrx.online/ barilup
  • # careprost for sale
    Travislyday
    Posted @ 2021/12/16 11:57
    http://plaquenils.online/ plaquenil 200 mg oral tablet
  • # ivermectin 3 mg tabs
    Eliastib
    Posted @ 2021/12/18 3:47
    fzlaty https://stromectolr.com stromectol usa
  • # comfortis without vet prescription: https://medrxfast.com/
    MedsRxFast
    Posted @ 2022/08/07 8:49
    comfortis without vet prescription: https://medrxfast.com/
  • # doxycycline 100mg dogs https://buydoxycycline.icu/
    Doxycycline
    Posted @ 2022/10/08 17:16
    doxycycline 100mg dogs https://buydoxycycline.icu/
  • # over the counter yeast infection treatment https://overthecounter.pro/#
    OtcJikoliuj
    Posted @ 2023/05/08 22:57
    over the counter yeast infection treatment https://overthecounter.pro/#
  • # medications without prescription https://pillswithoutprescription.pro/#
    PillsPresc
    Posted @ 2023/05/15 3:45
    medications without prescription https://pillswithoutprescription.pro/#
  • # best ed medication https://edpill.pro/# - best pill for ed
    EdPills
    Posted @ 2023/06/27 14:44
    best ed medication https://edpill.pro/# - best pill for ed
  • # online apotheke deutschland
    Williamreomo
    Posted @ 2023/09/26 13:52
    http://onlineapotheke.tech/# online apotheke deutschland
    online apotheke preisvergleich
  • # online apotheke gГјnstig
    Williamreomo
    Posted @ 2023/09/26 22:59
    http://onlineapotheke.tech/# online apotheke deutschland
    versandapotheke deutschland
  • # п»їonline apotheke
    Williamreomo
    Posted @ 2023/09/26 23:28
    http://onlineapotheke.tech/# online apotheke versandkostenfrei
    online apotheke gГ?nstig
  • # gГјnstige online apotheke
    Williamreomo
    Posted @ 2023/09/26 23:55
    https://onlineapotheke.tech/# п»?online apotheke
    online apotheke gГ?nstig
  • # п»їonline apotheke
    Williamreomo
    Posted @ 2023/09/27 4:11
    http://onlineapotheke.tech/# versandapotheke versandkostenfrei
    internet apotheke
  • # farmaci senza ricetta elenco
    Rickeyrof
    Posted @ 2023/09/27 17:02
    acheter sildenafil 100mg sans ordonnance
  • # farmacia online piГ№ conveniente
    Rickeyrof
    Posted @ 2023/09/27 17:49
    acheter sildenafil 100mg sans ordonnance
  • # comprare farmaci online all'estero
    Rickeyrof
    Posted @ 2023/09/27 18:53
    acheter sildenafil 100mg sans ordonnance
  • # licensed canadian pharmacies
    Dannyhealm
    Posted @ 2023/10/16 15:25
    I'm always informed about potential medication interactions. http://mexicanpharmonline.shop/# reputable mexican pharmacies online
  • # canadian pharmecy
    Dannyhealm
    Posted @ 2023/10/16 20:44
    Their medication synchronization service is fantastic. http://mexicanpharmonline.shop/# mexico drug stores pharmacies
  • # canada on line pharmacies
    Dannyhealm
    Posted @ 2023/10/17 19:18
    The staff always ensures confidentiality and privacy. http://mexicanpharmonline.com/# mexican pharmaceuticals online
  • # rx from canada
    Dannyhealm
    Posted @ 2023/10/17 20:59
    Trustworthy and reliable, every single visit. https://mexicanpharmonline.com/# mexican mail order pharmacies
  • # online-rx
    Dannyhealm
    Posted @ 2023/10/18 14:50
    Their private consultation rooms are a great addition. https://mexicanpharmonline.com/# reputable mexican pharmacies online
  • # pharmacies in mexico that ship to usa
    DavidFap
    Posted @ 2023/11/17 12:28
    http://edpills.icu/# best pills for ed
  • # paxlovid covid
    Mathewhip
    Posted @ 2023/12/01 2:52
    paxlovid covid https://paxlovid.club/# paxlovid
  • # acquisto farmaci con ricetta https://farmaciait.pro/ farmacia online miglior prezzo
    Farmacia
    Posted @ 2023/12/04 10:18
    acquisto farmaci con ricetta https://farmaciait.pro/ farmacia online miglior prezzo
  • # farmacias baratas online envío gratis
    RonnieCag
    Posted @ 2023/12/07 15:56
    https://tadalafilo.pro/# farmacia 24h
  • # farmacia barata
    RonnieCag
    Posted @ 2023/12/08 4:32
    https://vardenafilo.icu/# farmacias online seguras en españa
  • # farmacia envíos internacionales
    RonnieCag
    Posted @ 2023/12/08 7:32
    https://farmacia.best/# farmacia barata
  • # farmacia online 24 horas
    RonnieCag
    Posted @ 2023/12/08 15:56
    https://vardenafilo.icu/# farmacia barata
  • # farmacia envíos internacionales
    RonnieCag
    Posted @ 2023/12/08 18:58
    https://vardenafilo.icu/# farmacia online madrid
  • # farmacias baratas online envío gratis
    RonnieCag
    Posted @ 2023/12/08 22:09
    http://vardenafilo.icu/# farmacia 24h
  • # farmacia online barata
    RonnieCag
    Posted @ 2023/12/09 13:34
    https://vardenafilo.icu/# farmacias online baratas
  • # farmacias baratas online envío gratis
    RonnieCag
    Posted @ 2023/12/10 2:43
    http://tadalafilo.pro/# farmacias baratas online envío gratis
  • # ï»¿farmacia online
    RonnieCag
    Posted @ 2023/12/10 6:42
    http://sildenafilo.store/# sildenafilo sandoz 100 mg precio
  • # farmacias baratas online envío gratis
    RonnieCag
    Posted @ 2023/12/10 9:47
    http://farmacia.best/# farmacia online barata
  • # farmacia online envío gratis
    RonnieCag
    Posted @ 2023/12/10 15:45
    http://tadalafilo.pro/# farmacia online barata
  • # farmacias online seguras en españa
    RonnieCag
    Posted @ 2023/12/10 19:31
    https://vardenafilo.icu/# farmacias baratas online envío gratis
  • # farmacia online envío gratis
    RonnieCag
    Posted @ 2023/12/11 6:29
    http://farmacia.best/# farmacias online seguras
  • # farmacias baratas online envío gratis
    RonnieCag
    Posted @ 2023/12/12 1:02
    http://farmacia.best/# farmacias baratas online envío gratis
  • # ï»¿farmacia online
    RonnieCag
    Posted @ 2023/12/12 4:51
    http://sildenafilo.store/# sildenafilo cinfa sin receta
  • # farmacia envíos internacionales
    RonnieCag
    Posted @ 2023/12/12 8:05
    http://tadalafilo.pro/# farmacia barata
  • # ï»¿farmacia online
    RonnieCag
    Posted @ 2023/12/12 20:22
    http://vardenafilo.icu/# farmacias online seguras
  • # farmacias online seguras en españa
    RonnieCag
    Posted @ 2023/12/13 3:27
    http://tadalafilo.pro/# farmacia barata
  • # farmacias online seguras en españa
    RonnieCag
    Posted @ 2023/12/13 7:09
    http://farmacia.best/# farmacia online envío gratis
  • # ï»¿pharmacie en ligne
    Larryedump
    Posted @ 2023/12/14 21:01
    https://pharmacieenligne.guru/# Pharmacie en ligne fiable
  • # Pharmacie en ligne France
    Larryedump
    Posted @ 2023/12/15 11:02
    https://pharmacieenligne.guru/# Pharmacie en ligne France
  • # how to buy prednisone https://prednisonepharm.store/ prednisone online sale
    Prednisone
    Posted @ 2024/01/20 17:36
    how to buy prednisone https://prednisonepharm.store/ prednisone online sale
タイトル
名前
Url
コメント