0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void recursie(int);

int main(int argc, char **argv) {
  recursie(3);
}

void recursie(int a){
  if(a==0){return;}
    recursie(a-1);
    printf("%d",a);
    recursie(a-1);
}

出力は : 1213121 です。誰かがこの出力に到達する方法を説明できますか?

4

4 に答える 4

8
recursie(3)
  -calls recursie(2)
   - calls recursie(1)
     -calls recursie(0) -> void
     -prints 1
     -calls recursie(0) -> void
   -prints 2
   -calls recursie 1
      -calls recursie 0 -> void
      -prints 1
      -calls recursie 0 -> void
  -prints 3
  -calls recursie(2)
   - calls recursie(1)
     -calls recursie(0) -> void
     -prints 1
     -calls recursie(0) -> void
   -prints 2
   -callse recurse 1
      -calls recusie 0 -> void
      -prints 1
      -calls recursie 0 -> void
end
于 2012-08-25T13:46:50.547 に答える
2

これは、prinf(). 呼び出しの順序を理解する場合は、何もしない (何もしない) ため無視し、次のようrecursie(0)な単純なステートメントのリストにフラット化します。

recursie(3-1);
printf("%d", 3);
recursie(3-1);

これは次のことにつながります。

recursie(2-1);
printf("%d", 2);
recursie(2-1);
printf(3);
recursie(2-1);
printf("%d", 2);
recursie(2-1);

これは次のようになります。

printf("%d", 1);
printf("%d", 2);
printf("%d", 1);
printf("%d", 3);
printf("%d", 1);
printf("%d", 2);
printf("%d", 1);
于 2012-08-25T13:46:57.577 に答える
1

on を呼び出したときの出力は、 on を呼び出したときの出力の 2 つのコピーで囲まれnた の文字列です。ただし、 on を呼び出したときの出力は何もありません。これは、それを呼び出したときの出力が であることを意味します。したがって、それを呼び出したときの出力は(のコピーで囲まれています) であり、呼び出したときの出力は(の 2 つのコピーで囲まれています) です。nn-101"1"2"121""2""1"3"1213121""3""121"

于 2012-08-25T13:48:14.117 に答える
0

このような新しい概念がわかりにくい場合は、ノートを用意して、すべてをグラフ化してください。数値 3 が中央にある理由は、印刷の両側で 2 つの再帰関数を実行しているためであり、3 が中央になるように等しいパディングを残していることがわかります。次は、パディング (1) の中央に 2 が残されていることです。これは 3 が中央にあるのと同じ理由です。あなたが言ったので、1は両側にあり、0はありませんif 0, stop

あなたが探していた特定の結果は達成されませんでしたか?

于 2012-08-25T13:47:52.977 に答える