我的作业包括一个新操作(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/