不用循环求1+2+3...+n之和的多种求法

本文介绍了不使用循环结构求1到n的和的三种创新方法:递归法、模板特化法及构造函数法,并提供了C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不用循环求1+2+3...+n之和的多种求法

方法一:递归求解

int sum(int n)    //用递归求解
{
	if (n == 1)
		return 1;
	else
		return sum(n - 1) + n;
}

方法二:模板

通过模板的特化和递归实现

template <int x>  
struct A
{
	static const int value = A < x - 1 >::value + x;
};
template<>
struct A<1>
{
	static const int value = 1;
};
int main()
{
	cout << A<3>::value << endl;

	system("pause");
	return 0;
}
注意:类成员变量value必须是ststic静态的!否则无法记录数字之和。


方法三:构造函数

原理:在C++中可以new出一个数组,大小为n,可以通过调用n次构造函数,然后在构造函数里通过静态数据成员来记录n个数之和的大小。

class ConSum     //用构造函数实现
{
public:
	ConSum()      //利用创建n个对象来调n次构造函数
	{
		n++;
		sum += n;
	}
	static int GetSum()
	{
		return sum;
	}
private:
	static int n;   //用静态数据存储才可达到累加效果
	static int sum;
};
int ConSum::n = 0;       //初始化静态成员
int ConSum::sum = 0;

int sum_soltion(int n)
{
	ConSum *a = new ConSum[n];
	return ConSum::GetSum();   //访问静态成员函数必须用域作用符
}
int main()
{
	
	cout<<sum_soltion(3)<<endl;

	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值