今天学习了一下(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;
}
1万+

被折叠的 条评论
为什么被折叠?



