試験問題基礎練習FJの文字列(ハノータ)——再帰


再帰に対する理解は放棄である.
再帰の全過程を理解し追跡する企みを放棄し、再帰の2つの階層間の引き継ぎと再帰の終結の条件だけを理解します.
文書ディレクトリ
  • 再帰的な理解は放棄である.
  • 再帰の全過程を理解し追跡する企みを放棄し、再帰の2つの階層間の引き継ぎと再帰の終了の条件だけを理解します.
  • ハノータ
  • H-ハノータV HDU-1995
  • 試験問題基礎練習FJの文字列
  • ハノータ
    1.ハノタに対して、k層の皿と、それぞれa、b、cの柱の3つを与え、皿はすべてa上にある.私たちはどのように問題を解決しますか?私たちはk-1層をaからbに移動し、k番目の皿をaからcという柱に移動し、k-1層をkの上に移動します.k−1層がどのように移動するかについては考慮する必要はない.2.この2つの関係について、k層の総移動数はk−1層の移動数+第k層のaからcまでの数であることが分かった.(つまり1)+k-1層の移動数.3.同様に、k-1層も同じですね.つまり、k-2層の移動数に、k-1層目のaからcへの移動数に加えて、k-2層目のk-1層への移動数を加えます.k-1層については、考慮する必要はありません.**4.**最後に再帰的な終了条件になりました.1層だけの場合、直接1
    #include
    using namespace std;
    int n;
    solve(int x,char a,char b,char c){//a      ,b      ,c        
    	if(x==1){//         ,      c  
    		printf("%c->%c
    "
    ,a,c); } else{ solve(x-1,a,c,b);//x-1 a b solve(1,a,b,c);// k a c solve(x-1,b,a,c);//x-1 b c ( k ) } } int main(){ scanf("%d",&n); solve(n,'A','B','C'); }

    H-ハノータV HDU-1995
    トランスミッションドアのテーマは、x層ディスクを移動するには、k層目に何歩移動したか1層目:1層目移動1歩2層目:1層目移動2歩2層目移動1歩3層目:1層目移動4歩2層目移動2歩3層目移動1歩...ここから法則が見つかります2^(x-k)が、powで爆発するに違いありません
    #include
    using namespace std;
    typedef long long ll;
    int n,x,k;
    ll solve(int a,int b){
    	if(a==b){
    		return 1;
    	}
    	return 2*solve(a-1,b);
    }
    int main(){
    	scanf("%d",&n);
    	while(n--){
    		scanf("%d%d",&x,&k);
    		printf("%lld
    "
    ,solve(x,k)); } return 0; }

    試験問題基礎練習FJの文字列
    転送ドアという問題は私に再帰をさらに深めさせた.
    資源制限時間制限:1.0 sメモリ制限:512.0 MB問題記述FJは砂盤にこのような文字列を書いた:A 1=「A」A 2=「ABA」A 3=「ABACABA」A 4=「ABACABADABACABA」......その中の法則を見つけてすべての数列ANを書くことができますか?入力フォーマットには、N≦26の数しかありません.出力フォーマットは該当する文字列ANを出力し、改行で終了してください.出力に余分なスペースや改行、戻り文字を含めてはいけません.サンプル入力3サンプル出力ABACABA
    この問題はハノタと同じです.A 4=A 3+1+A 3…Ak=Ak-1+1+Ak-1再帰終了A
    #include
    using namespace std;
    int n;
    void solve(int x){
    	if(x==1){
    		printf("A");
    	}
    	else{
    		solve(x-1);
    		printf("%c",'A'+x-1);
    		solve(x-1);
    	}
    }
    int main(){
    	scanf("%d",&n);
    	solve(n);
    }