P5739 【深基7.例7】计算阶乘

本文介绍了如何利用递归函数实现计算阶乘(n!),避免了循环结构,通过推导递归式并编写相关C++代码来展示这一方法。
摘要由CSDN通过智能技术生成

题目描述

求 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;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值