C语言 用递归调用方法求出1+2+3+4+5+6...100的和

用递归调用方法求出1+2+3+4+5+6…100的和

所谓递归,通俗的来说“归”这个字,可以让人联想到从远方回家。
那么回家的路程是慢慢的缩短,直到最后到达了自己的家,当然递归的方法也是一样,100作为我现在的位置,1作为我的家,那么我回家一定是从100递减最后到1,也就代表了我到家了。

接下来我们看一下代码是如何编写的:

(提示:手机用户可以左划代码部分查看注释)

#include "stdio.h"	
int sum(int n);
void main() {
	printf("%d\n",sum(100));
}
int sum(int n){
	if(n==1){
	n=1;
	}
	else{
	n=n+sum(n-1);
	}
	return n;
}

首先我们来解释一下代码:
代码清晰可见分为两个函数,第一个是主函数main,第二个是自定义函数sum,让我们来逐一分析

main函数

printf("%d\n",sum(100));
这句话其实非常基础了,如果这句话也看不同建议把之前的内容好好巩固一下。
实际上这句话的意思就是:以十进制形式输出调用sum函数后的值,sum里的参数100实际就是我现在的位置。

sum函数
if(n==1){
n=1;}
else{
n=n+sum(n-1);}
第一句:如果n等于1那么我执行if花括号里的语句;
第二句:把1赋值给n;
第三句:如果n不等于1那么我else花括号里的语句;
第四句:把n+sum(n-1)的值赋值给n;
这里重点解释一下第四句话,起初n是为100也就是100+sum(99);这里的sum(99)又会重新调用sum函数,但是不同的是这时的n为99,如此循环下去,当n等于1时满足if条件,sum(100)到sum(1)都会变成一个数值,最后将所加的和返回给主函数main。

运行结果
在这里插入图片描述
可以看出5050就是1—100的和

看到这里肯定会有人有疑问,为什么必须要用函数的调用,我用for循环递减不是也可以实现吗?用for循环确实可以实现,但是那不叫递归了。
我们学习过函数的同学知道。函数之间允许互相调用,也允许嵌套调用,习惯上把调用者称为“主调函数”。函数还可以自己调用自己,称为“递归调用”。

能力提升
通过上面的例子可能大家对递归调用感到很麻烦,那么让我们来进一步的化简,先上代码

#include "stdio.h"	
int sum(int n){
	return n==1?n=1:n+sum(n-1);
}
void main() {
	printf("%d\n",sum(100));
}

这里对sum里的if进行了简化。
实际上是一样的,只是格式不同,大家学分支那一章应该会遇见,这里具体含义我就不解释了。

总结
看一遍也许你不会懂,不要担心。大都是这样,除非你是神童,所以一遍没有看懂不妨再看一遍,我相信你终究会明白并且熟练掌握递归调用方法。如果你看懂了,想检验一下自己,那么我留下一道题目由努力的你来做;
1.从键盘上输入一个整数,用递归调用方法求出它的阶乘

  • 15
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值