杭电OJ编码1001

问题描述:计算sum(n)=1+2+3+…+n

输入:该输入将由一系列的n个整数,每一个整数。

输出:对于每种情况,输出和(n)中,用一个空行。你可以假定该结果为32位带符号整数。

样本输入:1100

样本输出:15050

以上为原题,但是具体理解之后,可以发现,本体和1000题一样,是默认的循环输入,并且要做到循环输出。每次输入一个整型 num的值,程序会自动计算num+(num-1)+(num-2)+...+3+2+1的值,并返回回来。

因为今天看到了迭代的方法,所以开始时,我使用了迭代的方法来写本题。

#include<iostream>
int Sum(int num)
{
<span style="white-space:pre">	</span>if (num == 1)//基准情形
<span style="white-space:pre">		</span>return num;
<span style="white-space:pre">	</span>else
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>num = num + Sum(num - 1);//递归时,必须要能够逐层向下,所以,Sum中的值必须不断变化,代码前进段。
<span style="white-space:pre">		</span>return<span style="white-space:pre">	</span>num;//递归达到基准情形之后,需要有递归返回段。根据下层返回的值,对上层的值产生影响。
<span style="white-space:pre">	</span>}
}
int main()
{
<span style="white-space:pre">	</span>int num = 0;
<span style="white-space:pre">	</span>while (std::cin >> num)
<span style="white-space:pre">		</span>std::cout << Sum(num) << std::endl << std::endl;//题目要求,需要两个回车换行。
<span style="white-space:pre">	</span>return 0;
}
在Visual Studio 2015中可以正常运行,但是每次在HDOJ上提交的时候都会报错。

后来仔细看看发现了,Sum函数中else中没有使用return!

经过修改之后:

#include<iostream>//使用用输入输出流
int Sum(int num)//计算总数的函数
{
	if (num == 1)
		return num;//
	else
		return (num + Sum(num - 1));//在此处,加上了return,使用了迭代。
}
int main()
{
	int num = 0;//用于接收输入的值
	while (std::cin >> num)//当成功输入数据时,“<span style="white-space: pre-wrap; font-family: "Courier New", Courier, monospace;">std::cin >> num</span><span style="white-space: pre-wrap; font-family: "Courier New", Courier, monospace;">”为true,while循环执行</span>
	{
		std::cout << Sum(num) << std::endl << std::endl;//调用Sum函数,并且直接输出Sum函数返回的结果
	}
	return 0;
}
在上面的代码调试成功之前,我为了让HDOJ能够通过,又写了一个代码提交,也粘在下面:

#include<iostream>
int main()
{
	int a;
	while (std::cin >> a)
	{
		int result = 0;
		for (int i = a; i > 0; i--)
		{
			result += i;
		}
		std::cout << result << std::endl << std::endl;
	}
	return 0;
}

这个代码和上面的基本解题思想是相同的,都是累加,最后输出结果。

总结:写代码时要小心,往往越是小的点,越容易出错,而且因为过于微小,所以就被忽视,从而检查不出来。


注:当在IDE中编写代码时,因为使用的是死循环,所以总是无法正常退出,在windows系统中,输入文件结束符的方法是敲Ctrl+Z,然后按Enter键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入时用Ctrl+D。


递归简论:

1、基准情形。在递归中,必须要有基准情形,他们不用递归就能求解。

2、有递归前进段。递归不断深入的部分。

3、递归返回段。当基准情形出现之后,能够再往外层返回答案的部分。

4、不断推进。对于那些需要递归求解的情形,递归调用必须总能够朝着基准情形的方向推进。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值