-2

我有一个包含新操作(a [n] b)的作业,给定:

  • a [1] b = a b
  • 一个 [n] 1 = 一个
  • 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 回答