-2

次のように、新しい操作(a [n] b)を含む宿題があります。

  • a [1] b = a b
  • a [n] 1 = a
  • 2 [2] 3 = 2 [2-1](2 [2-1] 2)2 repeated 3 times= 2 [1](2 [1] 2)= 2 2 2 = 16
  • 2 [2] 2 = 2 [2-1] 2 2 repeated 2 times= 2 [1] 2 =(2 2)= 4
  • 4 [3] 3 = 4 [3-1](4 [3-1] 4)= 4 [2](4 [2] 4)4 repeated 3 times= 4 [2](4 [1](4 [1](4 [1] 4)))=
    = 4 [2] 4 4 4 4

解決策は必要ありません。自分で解決できるようにアドバイスが必要です。

4

1 に答える 1

2

ここで言われていることは、次のように言い換えることができます。

正の整数の場合、a、b、およびnは次のように定義します。

    a [n] b = a [n-1] ( a [n-1] ( ... a ) ) taken b times

Cのような言語で

int myoperator (a, n, b) {
    int x, i;
    x = a;
    if (n == 1){
       x = pow(a,b);
    } else {
       for(i = 1; i < b; i++){
           x = myoperator (a, [n-1], x);
       }
    return x;
}

値は急速に大きくなり、すぐにマシン整数の範囲から外れることに注意してください。

a[n]bまた、次のように定義できることにも注意してください

 a [n] b = a [n-1] ( a [n-1] (b-1) ).

この定義を使用すると、for上記のループを排除できます。

int myoperator (a, n, b) 
int a,n,b;
{
    int x;
    x = a;
    if (n == 1) 
        x = pow(a,b);
    else if (b == 1) 
                x = a;
         else {
              assert(b>1 && n>1);
              x = myoperator (a, n-1, myoperator(a,n-1,b-1));
         }
    return x;
}
于 2012-06-16T11:34:55.763 に答える