Cで再帰関数を書くのに問題があります:
void func(int n)
これは、指定された数値に対して、nは「1」を出力し、その後にn個のゼロを出力します。
例えば:
func(3);
プリント:1000
func(5);
プリント:100000
(関数外の)グローバル変数は許可されておらず、引数の数を増やしてはなりません。他のヘルパー関数は許可されていません。
この問題は、たとえばfunc
との2つの関数を使用して解決できfunc_rec
ます。func
を出力し、ゼロのみを(再帰的に)出力する1
再帰関数を一度呼び出します。func_rec
いくつかのポインタ:
静的変数を調べることをお勧めします。静的変数を設定して、関数が再帰的に呼び出されているかどうかを確認できます。グローバル変数の使用が許可されていない場合、それはトリッキーな回避策にすぎません。そして、再帰が完了したら、次の呼び出しのためにそれを元に戻します。
#include <stdio.h>
void func(int k){
if(k==0){
printf("1");
return;
}
func(k-1);
printf("0");
}
int main(){
func(3);
return 0;
}
#include <stdio.h>
void func(int n)
{
static one = 1;
if (one == 1){
printf("1");
one--;
func(n - 1);
}
else {
if (n < 0){
printf("\n");
return;
}
else {
printf("0");
func(n - 1);
}
}
}
int main() {
func(5);
return 0;
}
コードは非常に些細なものなので、宿題のように見えても、私はコードを配っています。
あなたの以前の質問は、あなたがcコーディングにあまり興味がないことを示唆しています。私がやろうとしているのは、コードを提供することでフラストレーションを減らすことですが、ひねりを加えています。
私が与えたコードが「純粋」関数ではない理由を教えてください。このソリューションをグローバルストレージを持つソリューションと一緒に破棄する必要がある理由。
あなたはこのことを学ぶべきです、それはかなり興味深いです:)