递归的过程分为两个阶段:回归和递推。回推就是根据要求解的问题找到最基本的问题解,这个过程需要系统栈保存临时变量的值;递推是根据最基本问题的解得到所求问题的解,这个过程是释放系统栈的空间,直到得到问题的解。
1.n的阶乘求值,通过分析可知,当n=0或n=1,n的阶乘值为1,否则f(n)=n*f(n-1)
#include <stdio.h>
long int Fact(int n);
int main()
{
int n;
printf("请输入一个整数:\n");
scanf("%d",&n);
printf("%d=%d\n",n,Fact(n));
}
long int Fact(int n)
{
if(n<0)
{
printf("不存在小于0的阶乘!\n");
return -1;
}
if(n==0)
{
return 1;
}
else
{
return n*Fact(n-1);
}
}
2.斐波那契第n项求值
//斐波那契第n项求值 0,1,1,2,3,5,8,13
#include <stdio.h>
int fib(int n);
int main()
{
int n;
printf("请输入一个整数\n");
scanf("%d",&n);
printf("%d=%d\n",n,fib(n));
return 0;
}
int fib(int n)
{
if(n==0)
{
return 0;
}
if(n==1)
{
return 1;
}
if(n>1)
{
return fib(n-1)+fib(n-2);
}
}