学习C语言之函数递归

题目一:计算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;
}

总结:

 函数递推对于需要多次重复运算的时候,可以简化运算,方便快捷,但到递推层数过多时,会出现栈溢出的情况,这就需要使用循环(迭代)来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值