2011-01-08 2 views
-3
#include <stdio.h> 
int f(int n) 
{ 
    if(n <= 1) 
    return 1; 
    if(n%2 == 0) 
    return f(n/2); 
    return f((n-1)/2) + f((n-1)/2+1); 
} 

/*To test above function */ 
int main() 
{ 
    int a = 11; 
    printf("%d", f(11)); 
    getchar(); 
    return 0; 
} 
+3

プログラムは、セグメンテーションフォルトのない私のために5をプリントします。この関数は、無限回帰にはなりません。n = 11ではなくです。 – IVlad

+0

最初は、答えを返し、1秒後にフォールトが発生します。 – Ankur

+1

あなたのハードウェア、OS、開発ツール(コンパイラ、Cライブラリのバージョンなど)についてもっと詳しく教えてください。 – thkala

答えて

1

なぜデバッガでトレースして、何が間違っているのか見てみませんか?

+0

私はそれをデバッグしようとしました、そのショーのセグメンテーションフォールト。 – Ankur

+4

これはたぶんその質問に対するコメントに過ぎないはずです。それは本当に意味のある意味での答えではありません。 –

+2

まあ、私はそれが正しい答えだと思います。 "私のコードがクラッシュする"という質問に対しては、正しい答えは "デバッガを使ってクラッシュを分析する"です。多くの場合、問題はデバッガではっきりしています。 – Suma

0

このプログラムには何も問題はありません。無限ループまたはsegフォールトが発生しません(また、< = 1の状態であるため、プログラムは確実にクラッシュしません)。 なんで何らかの理由であなたのマシンが故障しています...おそらくメモリが不足していたり​​、プログラムを混乱させたりしていますか?あるいはコンパイラが怒鳴りますか? (それはすでに私に起こったもの)。可能であれば、他のマシン上でコードを実行し、それでもエラーが発生するかどうかを確認してください。

+0

その作業は今、全員ありがとう – Ankur

1

このコードはコンパイルされて正常に動作します。結果は5です。explicitキーワードを試して、最適化の欠陥かどうか確認しましたか?編集:問題がgetchar()の場合は、実行時にオペレーティングシステムまたはコンパイル時にライブラリに問題が発生する可能性があります。それはきれいなコンパイルですか?どのコンパイラを使用していますか?

関連する問題