我有两个问题,
尾递归函数可以有两个以上的参数吗?
以下以指数函数实现,以它为基础 提升到它的力量,还有其他方式可以进一步改善 以下功能?
这是我的代码:
#include <stdio.h>
int power(int m,int n, int o);
int powerAux(int m, int n);
main() {
printf("%d\n", powerAux(2,3));
}
int power(int m, int n, int o) {
if (o == 1) {
return m;
}
return power(m*n, n, o - 1);
}
int powerAux(int m, int n) {
return power(m, m, n);
}
答案 0 :(得分:3)
当然,为什么不呢?
您的函数不会处理0
的指数。您的基本情况应更改为:
if (o == 0) {
return m;
}
并将您的累加器初始化为1
:
return power(1, m, n);
此外,n
/ o
应该更改为unsigned
,因为您的代码不会处理负指数(并且它无法更改为非指数)积分类型)。
答案 1 :(得分:1)
通过实施快速乘法算法,您绝对可以提高函数的效率:
int exp(int base, int pow) {
if (pow == 0) {
return 1;
}
if (pow%2 == 0) {
int temp = exp(base, pow/2);
return temp*temp;
} else {
int temp = exp(base, (pow-1)/2);
return temp*temp*base;
}
}
我们使用temp值来计算递归时两次计算相同的值。