関数をどのようにして特定のパラメータを静的変数とみなすのかと思いました。例えば、私は、ひょう番号を生成するために、成功せず、試してみました:静的変数として関数パラメータを作成する
#include<stdio.h>
int hailstone(int);
int n; /* n is an extern variable*/
int main(){
hailstone(n);
return 0;
}
int hailstone(int n){
static int m = n; /*not possible because n is not constant*/
if(m % 2 == 0 && m != 1)
hailstone(m /= 2);
else if(m != 1)
hailstone((m *= 3) + 1);
else
exit(0); /*Is the use of exit() correct, in this case?*/
return 0;
}
Iは、nを詳しく説明し、静的変数を使用したいと思います。それ以外の場合、各再帰呼び出しはパラメータn
全体で動作し、無限に進み、ケースベースに到達することはありません。
いくつかの質問:
- このアイデアは問題に実現可能なアプローチを表していますか?
- このアイデアは、問題に対するの妥当性/有効性のあるアプローチを表していますか?
exit(0)
は、同様の場合に正しく使用されていますか?
'静的int型メートルの必要はありません。しかし、m = n; 'も可能です。 – Bathsheba
再帰関数でグローバル変数を使用すると、再帰のポイントが無効になるため、ソリューションを再考する必要があります。いずれにせよ、あなたの関数は基本ケース(到達できない0以外)を表示しません。あなたの意見では、基本ケースは何ですか?なぜ再帰がそれに到達しないと思いますか? – rici
@ricieは、 'm <1'で表されないケースベースですか?おそらく、最終結果が1になるはずなので、 'm == 1'はより良い基本ケースになる可能性があります。また、私はグローバル変数の問題をどのように乗り越えているかについて正確に迷っていました。 – Worice