2021-4-17【PTA】【计算阶乘和】

本文介绍了一个使用C++实现的阶乘求和程序,通过递归和循环两种方式展示了如何计算从1到n的所有整数的阶乘之和。代码简洁明了,适合初学者理解递归和循环的基本应用。

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int jc(int n){//阶乘递归函数
    if(n==0){
        return 1;
    }
    else{
        return n*jc(n-1);
    }
}

int main(){
    int n,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        sum += jc(i);//调用求和
    }
    cout<<sum<<endl;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,sum=0,j=1;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		j=j*i;//绝妙
		sum=sum+j;
	 } 
	 cout<<sum;
	return 0;
 } 

### 阿克曼函数递归 PTA 实现解题思路 阿克曼函数是一种经典的双参数递归函数,其定义如下: - 当 \( m = 0 \),\( ACK(m, n) = n + 1 \)[^1]。 - 当 \( m > 0 \) 且 \( n = 0 \),\( ACK(m, n) = ACK(m - 1, 1) \)[^2]。 - 当 \( m > 0 \) 且 \( n > 0 \),\( ACK(m, n) = ACK(m - 1, ACK(m, n - 1)) \)[^3]。 在 PTA 平台上实现该函数时,需严格遵循以上递归规则。以下是具体的解题思路代码实现: #### 解题思路 1. **边界条件处理** 函数的核心在于正确处理三种情况下的递归终止条件以及递归调用逻辑。对于每种输入组合,都需要精确匹配对应的递归路径[^4]。 2. **递归深度限制** 需要注意的是,由于阿克曼函数的递归层数会随着 \( m \) \( n \) 的增大而迅速增加,因此实际测试数据通常只涉及较小范围内的 \( m \) \( n \) 值(如 \( m \leq 3 \))。超出此范围可能导致栈溢出错误。 3. **效率优化** 虽然题目允许直接使用递归来解决问题,但在某些情况下可以通过记忆化技术减少重复计算,从而提高程序运行效率。不过,在 PTA 上提交时一般无需额外考虑性能问题。 #### C++ 实现代码 ```cpp #include <iostream> using namespace std; int ack(int m, int n) { if (m == 0) return n + 1; else if (n == 0 && m > 0) return ack(m - 1, 1); else if (m > 0 && n > 0) return ack(m - 1, ack(m, n - 1)); } int main() { int a, b; cin >> a >> b; cout << ack(a, b) << endl; return 0; } ``` #### Python 实现代码 ```python def ackermann(m, n): if m == 0: return n + 1 elif n == 0 and m > 0: return ackermann(m - 1, 1) elif m > 0 and n > 0: return ackermann(m - 1, ackermann(m, n - 1)) a, b = map(int, input().split()) print(ackermann(a, b)) ``` 通过上述两种语言版本的代码可以看出,无论是在语法结构还是逻辑表达方面都保持了一致性,并严格按照原始定义进行了编码转换[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternity_GQM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值