C语言实践项目_递归计算器

编程思路:

(单步调试,很重要)

第一步:(先不考虑复杂的,从最简单的入手)

从键盘上输入一串数字  例: 1+2+3-5+7-9

分两个数组:char s[100];// 存放 符号   int a[100];// 存入数字

看符号是什么,找对应的前,后两个数字,进行+ or -

 

第二步: (加入* / )

我的思路:

先遍历 *  /  把它们都做完,不就回到第一步了,只剩 + -了

 

第三步:(加入 (), 括号用递归)

解决思路:先做出一个括号的

注意点:左括号和右括号的匹配问题,

找到最里面的括号,把它当成第二步,(这个就是第二步已经解决好的了)再层层递归,出来

 

第四步,分成 .c .h

即 多模块化

这里要理解,全局变量,局部变量,静态变量

https://blog.csdn.net/chemddd/article/details/103671518

 

关于递归

递归的思想很巧妙,但是难以理解,我学习了好几次,终于有所认识。递归看起来是自己调用自己,直觉上非常难以想象,但是联系到运算过程中的递归调用,也是一种调用而已,重点:它每次递归时,系统在原来的函数栈上开辟一个栈,这个栈里有局部变量和保存本次递归的运算结果的变量,随着更多的递归,栈一层一层地累积起来,而调用的递归函数在程序运行时就放在了代码区里、且一直在那里不动,栈和递归函数不在一个地方,因此递归本质上不过是函数调用。当递归开始结束后,最上一层栈消亡,把结果传递给下一层的栈,这样栈一层一层地消失和往下传递运算结果,最终得到了最终结果。如果递归达到了10层以上,这事儿也就机器能忍受,人嘛肯定受不了。 
递归在解决很多重复性的问题上非常有用,比如二叉树的遍历,二分查找,快速排序,归并排序,但是得注意两点:


递归的终止条件一定要提供,不然递归绵绵无绝期而栈溢出
递归代码相比循环会很简洁,但是递归层次太多也会发生栈溢出。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值