2016-09-23 9 views
-1

さて、私はこれを何度も書き直してきました。しかし、一番長い羽目板シーケンスが表示されるので、最も長いシーケンス関数が役立つと思っていました。しかし、私はそれを見つけるために使われた価値を見つけたり、保管したりする方法を見つけることができないようです。誰かが説明する方法があれば、私はそれを感謝します。ループ関数を再帰関数として書くにはどうすればよいですか?

int longestSequence(int n) 
{ 
    int u = n; 

    if(u == 1) 
    { 
     return 1; 
    } 
    else 
    { 
     return max(hailstoneLength(u), longestSequence(u-1)); 
    } 
} 

私はとのトラブルを抱えている部分が私の最長の起動シーケンスである:

int hailLongestSeq(int n) 
{ 
    int k; 
    int longest = 0; 
    for(int j = 1; j <= n; j++) 
    { 
     if(hailstoneLength(j) > longest) 
     { 
      longest = hailstoneLength(j); 
      k = j; 
     } 
    } 
    return k; 
} 

私は再帰にこれを作る方法がわからないんだけど、私は私が使用している人々を見て、いくつかの再帰のために気づきました私はループを使うべきではないと確信していました。 愚かな質問かもしれませんが、誰かが知っているなら、ループを再帰に変換する式はありますか?

アウトプット期待は、このようなものです:

10までの番号で始まる最長ひょうシーケンスは長さ20 を持っている10までの番号で始まる最長ひょうシーケンスが9

で始まります9のシーケンスとして

20の番号の長さを有し、そしてはい1から10

+0

これは昨日聞いたことがありませんでしたか? –

+0

数式は、問題の点で問題に言い換えます。例:n回反復のforループは、n-1回反復のforループに対する反復です。 – perreal

+0

いいえこれは昨日質問しませんでした。今日は午前1時にこれを提出しました – Zabe

答えて

3

に最も長いループごとには明らかにこのような、再帰呼び出しに変換することができる。

for (i=0; i<N; i++) { 
    body; 
} 

にそれを翻訳:これは簡単に(必要な場合など、戻り値をパラメータを追加)ループ計算のための任意に拡張することができ

func(int i) { 
    if (i<N) { body; func(i+1) } 
    else return; 
} 

func(0); 

+0

うわー。ありがとう!私はまだC++を学んでいます。私はこれをもう一度必要とする場合に備えて、おそらくこれを保存するべきです。 – Zabe

+0

私はこれを行うとき、私はセグメンテーション違反をゲットしています。どうすれば修正できますか?それとも私はどんなことをしているのか? – Zabe

0

保存する値のローカル変数whoを、関数のパラメータシグネチャに追加することができます。再帰的にコードを書き直そうとしました。これが問題を解決するかどうかを確認し、確認します。

int hailLongestSeq(int n, int j, int k, int longest) 
{ 
    if(j <= n) 
    { 
     if(hailstoneLength(j) > longest) 
     { 
      longest = hailstoneLength(j); 
      k = j; 
     } 
     k = hailLongestSeq(n, ++j, k, longest); 
    } 
    return k; 
} 

これは、値を保持するパラメータとして変数を渡す、しかし論理は同じままで、修正を必要とするかもしれません。

+0

これと同じですが、私はセグメント違反をgettignしています – Zabe

+0

申し訳ありませんが、j ++ ++ jの代わりに無限ループを追加して申し訳ありません。私は今コードを修正しました。もう一度チェックして、あなたのために働いているかどうかを確認できますか? –

+0

ああ、それはRishabh、ありがとうございます。ありがとう、それが問題なければ、それがどういう仕組みの説明を得ることができればいいですか?私はより多くの手のシミュレーションを行っています。 – Zabe

関連する問題