用函数f(x)来讲递归
一旦找到了,f(x)与f(x+b)、x 之间的某些固定关系,就找到了f关于x的递归算法。
1、比如求1+2+3+.....+x的和的递归算法。
就是 f(x) = f(x-1)+x; f(1) = 1
那么有递归算法
int f(int n) {
if(n==1) return 1;
return f(n-1)+n;
}
2、比如求自然数x的阶乘。
那么就有f(x) = f(x-1) * x; f(1) = 1;
那么求阶乘的递归算法
int f(int n) {
if(n==1) return 1;
return f(n-1)*n;
}
3、比如a的x次方。
那么有f(a, x) = a * f(a, x-1)
那么有它的递归算法
static int f(int a, int x) {
if (a == 0)
return 0;
if (x == 0)
return 1;
if (x == 1)
return a;
return a * f(a, x - 1);
}
递归并不是最优算法。在确定步骤的情况下,不建议使用递归。可以使用迭代算法进行替代。
比如上面的第3题
static int f2(int a, int x) {
if (a == 0)
return 0;
if (x == 0)
return 1;
int sum = 1;
for (int i = 1; i <= x; i++) {
sum = a * sum;
}
return sum;
}