我的作业包括一个新操作(a [n] b),给出:


a [1] b = ab
a [n] 1 = a
2 [2] 3 = 2 [2-1](2 [2-1] 2)2 repeated 3 times = 2 [1](2 [1] 2)= 222 = 16
2 [2] 2 = 2 [2-1] 2 2 repeated 2 times = 2 [1] 2 =(22)= 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] 4444


我不需要解决方案,我只需要建议即可自己解决。

最佳答案

这里所说的话可以改写如下。


  对于任何正整数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;
}

关于c - 如何用递归实现这个新操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11062886/

10-13 04:55