1+2+...+n题

今天学习了一下(57条消息) 【第02题】给定 n,求 1 + 2 + 3 + ... + n 的和 | 四种解法_英雄哪里出来-CSDN博客

并做了一下习题,解题过程如下:

一、求1+2+...+n

 1.题目:

剑指offer64.求1+2+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字及条件判断语句(A?B:C)。

首先想到的是使用递归函数,但由于知识储备不足,所以临时搜索了一下递归函数——(57条消息) 为什么你学不会递归?告别递归,谈谈我的经验_帅地-CSDN博客_递归

但是只看了前半部分,因为后半部分暂时理解不了。 

 2.解题过程

I.清楚递归函数要做什么:

要计算1+2+...+n

//计算1+2+...+n
int Add(int n)
{

}

II.寻找递归结束条件:

由于递归就是先n+(n-1)+(n-2)+...+5+4+3+2+1,然后再返回算1+2+3+...+n,所以此处递归结束条件为n==1。

//计算1+2+...+n
int Add(int n)
{
   if(n==1)
   {
       retuen 1;
   }
}

III.找出函数的等价关系式:

Add(n)=Add(n-1)+n;

//计算1+2+...+n
int Add(int n)
{
	if(n==1)
    {
	   return 1;
    }
	return Add(n-1)+n;
}

IV.填充主函数

#include<stdio.h>

int Add(int n)
{
	if(n==1)
	{
		return 1;
	}
	return Add(n-1)+n;
}
int main() 
{
	int n,sum=0;
	printf("请输入n的值:");
	scanf("%d",&n); 
	printf("sum=%d",Add(n));
	return 0;
}


但是呢,题目要求不能使用if关键字,所以看了几个题解(惊喜的发现,有一个题解跟我上面做的差不多):

面试题64. 求 1 + 2 + … + n(逻辑符短路,清晰图解) - 求1+2+…+n - 力扣(LeetCode) (leetcode-cn.com)

V.最终代码

#include<stdio.h>
int sum=0;
int Add(int n)
{
	
	bool b=n>1&&Add(n-1)>0;//若n>1,则开启下层递归Add(n-1);若n<=1,则终止递归。      
	sum+=n;
	return sum;        
}
int main() 
{
	int n;
	printf("请输入n的值:");
	scanf("%d",&n); 
	printf("sum=%d",Add(n));
	return 0;
}

 注:bool类型是C++的,C语言中无bool类型。但是DEV又能够执行。所以改成C++的吧,或者把Add()函数改成

int Add(int n)
{
    n&&(n+=Add(n-1))
    return n;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宋卿来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值