程序调用自身的编程技巧称为递归( recursion )。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
Stack overflow(栈溢出),main函数在栈中申请一块空间,调用test函数,也要为其分配空间,test函数又调用自己,又要分配一块空间,所以递归如果没有退出条件或者递归太深,会造成栈溢出现象
1.不能死递归,要有跳出条件,每次递归逼近跳出条件
2.递归层次不能太深
递归实现k的n次方
如:56 = 55+54+53+52+51+50
double Pow(int k, int n)
{
if (n > 0) //次方数为正数
{
return Pow(k, n - 1) * k; //依次求n-1,n-2,n-3...的次方
}
else if (n < 0) //次方数是负数
{
return 1.0 / Pow(k, -n) * k;
}
else //1次方
{
return 1.0;
}
}
int main()
{
int k,n;
scanf("%d %d\n",&k,&n); //k是数值,n是次方数
double ret = Pow(k,n);
printf("%d\n",ret);
return 0;
}