题目一:计算n的阶乘
所谓函数递归,就是函数自己调用自己
# include <stdio.h>
int jiecheng(int n)//定义函数
{
if(n == 0)//如果n == 0,即0的阶乘,返回1
return 1;
else if(n > 0)
return n*jiecheng(n - 1);//如果n>0,则有n*(n-1)*(n-2)一直到0,递归
}
int main ()
{
int n = 0;
scanf("%d",&n);
int a = jiecheng(n);//调用函数
printf("%d",a);//打印
return 0;
}
方法二:使用迭代(循环是其中一种)
# include <stdio.h>
int diedai(int n)//循环
{
int b = 0;
int count = 1;
for(b = 1;b <= n;b++)//b为1到n
{
count*=b;//将所有的b乘阶
}
return count;//返回
}
int main()
{
int n = 0;
scanf("%d",&n);
int a = diedai(n);
printf("%d",a);
return 0;
}
题目二:斐波拉契数列
斐波拉契数列定义:第一,二项为1,其余项为前项的和,
求第n项的数
递归代码如下:
# include <stdio.h>
int Fib(int n)
{
if(n <= 2)//第一,二项为1
return 1;
else if(n > 2)
return Fib(n - 1) + Fib(n - 2);//第n项等于前两项之和
}
int main()
{
int n = 0;
scanf("%d",&n);
int a = Fib(n);//调用函数Fib()
printf("%d",a);
return 0;
}
方法二:
使用循环求第n项数,代码如下:
# include <stdio.h>
int Fib(int a)//定义函数
{
int c = 1;//第一项
int d = 1;//第二项
int e = 1;
while(a > 2)
{
e = c + d;//e等于前两项之和
c = d;
d = e;
a--;//每次都减一
}
return e;//返回e
}
int main ()
{
int a = 0;
scanf("%d",&a);
int b = Fib(a);//调用函数
printf("%d",b);
return 0;
}
总结:
函数递推对于需要多次重复运算的时候,可以简化运算,方便快捷,但到递推层数过多时,会出现栈溢出的情况,这就需要使用循环(迭代)来解决。