C语言练习(6)
前言
- 理解递归函数是如何构建,递归函数的用处
问题
- 请用递归和循环两种方法,求 10 ! 10! 10!值为多少?
问题分析
- 令 f ( n ) = n ! f(n)=n! f(n)=n!,可以知道 f ( n ) = n ∗ ( n − 1 ) ∗ ( n − 2 ) . . . . . . 3 ∗ 2 ∗ 1 f(n)=n*(n-1)*(n-2)......3*2*1 f(n)=n∗(n−1)∗(n−2)......3∗2∗1,通过用递归的思想可以写成 f ( n ) = n ∗ f ( n − 1 ) f(n)=n*f(n-1) f(n)=n∗f(n−1)
- 例如: 5 ! = 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1 5!=5*4*3*2*1 5!=5∗4∗3∗2∗1
使用递归方法,首先要构建递归函数,下面给了递归是如何实现的流程图
long f(int m)
{
if (m == 1)
return 1;
else
return m * f(m - 1);
}
取m=3,演示递归如何算的
使用递归的方法代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
long f(int m)
{
if (m == 1)
return 1;
else
return m * f(m - 1);
}
int main()
{
int y = 0;
int m = 0;
printf("请输入阶乘数:");
scanf("%d",&m);
y =f(m);
printf("阶乘值为:%d\n",y);
return 0;
}
使用循环的方法代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int m = 0;
int i = 0;
int f = 1;
printf("请输入阶乘数:");
scanf("%d",&m);
for (i = 1; i <= m; i++)
{
f = i * f;
}
printf("阶乘值为:%d\n",f);
return 0;
}
结果
使用递归的方法结果
使用循环的方法结果
总结
- 使用循环和递归的结构求解各有优缺点,使用递归求解复杂的比较方便,写一个递归函数即可实现,但采用循环结构好理解,对于复杂递归不好写