递归函数是什么呢?其实就是在调用一个函数的过程中直接或间接地调用该函数本身。那么在什么时候用递归调用方法来解决呢?当然是新问题与原问题的解决方法相同时采用这一方法。但要注意的是不能无终止的自身调用,这是不正确的,这个时候if就是个很好的选择了。
下面我们就来看看一个老朋友--阶乘:
#include<stdio.h>
int factorial(int a){
int b;
if(a==1)
b=1;
if(a>1)
b=a*factorial(a-1);//不断调用该函数本身,直到a<1;
return b;
}
int main(){
int a,b;
scanf("%d",&a);
b=factorial(a);
printf("%d",b);
return 0;
}
这里以a=3为例分析外部函数:
由图可看出求解过程有两个阶段,第一阶段称为递推阶段:将原问题不断分解成新的子问题;第二个阶段称为回归阶段:按照递推的逆过程逐一求值回归,最终达到递推的开始处。