C言語関係掲示板

過去ログ

No.1073 ループ文から再帰に変換する方法

[戻る] [ホームページ]
No.14076

ループ文から再帰に変換する方法
投稿者---SAI(2004/05/17 13:47:48)


ープ文(while文, for文, do〜while文)を再帰に変換する方法ってありますか?
教えて下さいおねがいします。


No.14077

Re:ループ文から再帰に変換する方法
投稿者---RiSK(2004/05/17 14:37:44)


>ープ文(while文, for文, do〜while文)を再帰に変換する方法ってありますか?

あります。


No.14080

Re:ループ文から再帰に変換する方法
投稿者---RiSK(2004/05/17 15:03:13)


#include <stdio.h>

#define LOOP 5

void recurrent(int i) {
  if (i > 0) {
    printf("i == %d\n", i);
    i--;
    recurrent(i);
  }
}

int main(void)
{
  int i;

  puts("for loop");
  for (i = LOOP; i > 0; i--) {
    printf("i == %d\n", i);
  }

  puts("recurrent");
  recurrent(LOOP);

  return 0;
}



No.14079

Re:ループ文から再帰に変換する方法
投稿者---ニタチ(2004/05/17 14:43:49)


>ープ文(while文, for文, do〜while文)を再帰に変換する方法ってありますか?

 ループ文の中の処理によると思いますが、
 一応簡単なやつを↓。あってるかな?
#include<stdio.h>

int saiki(int n);

int main(void)
{
    int i;
    int n = 10;
    int sum = 0;

    /* ループ文を使って */
    for( i = n ; i > 0 ; i-- )
    {
        sum += i;
    }
    printf("sum = %d\n", sum );

    /* 再帰を使って */
    sum = saiki( n );
    printf("sum = %d\n", sum );

    return 0;
}

int saiki(int n)
{
    return ( n > 0 ) ? (n + saiki( n - 1 )) : (0); 
}