如何用递归实现这个新操作?

时间:2012-06-16 11:11:05

标签: c recursion

我有一个包含新操作(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

我不需要解决方案,我只需要建议,以便我自己解决。

1 个答案:

答案 0 :(得分: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;
}