题目描述
求 n!,也就是1×2×3⋯×n。
挑战:尝试不使用循环语句(for、while)完成这个任务。
输入格式
第一行输入一个正整数 n。
输出格式
输出一个正整数,表示 n!。
输入输出样例
输入 #1复制
3
输出 #1复制
6
说明/提示
数据保证1≤n≤12。
分析
一般做法即用循环做是没问题的,不过要达到题目中所说不用循环的话,就要用到递归。
递归简介
通过在内部进行自我调用的函数被称为递归函数。因为会无限调用,所以递归函数会有一个退出条件语句,否则内存不够大栈满程序会异常退出。递归函数运作是基于一个表达式(递归式)算法。因此,做递归题第一步就是推递推式。
具体做法
step1:推递归式
由n!=1*2*3……*n此式,有
n!=1*2……*(n-1)+n;
n!=1……*(n-2)+(n-1)+n;
继续推,
将其带入dr(自定义)函数,得
return (dr(x+1)*x);
step2:写代码
AC代码:
#include<bits/stdc++.h>//万能头文件
using namespace std;//使用标准命名空间
int n;//定义全局变量n,方便函数使用
int dr(int x)//递归函数
{
if(x==n)return n;//判断条件,当x=n时返回上一级函数
else return (dr(x+1)*x);//自我调用
}
int main()
{
cin>>n;//数据输入
cout<<dr(1);//因为类型为int,所以可以直接将其输出
return 0;
}