编程思路:
(单步调试,很重要)
第一步:(先不考虑复杂的,从最简单的入手)
从键盘上输入一串数字 例: 1+2+3-5+7-9
分两个数组:char s[100];// 存放 符号 int a[100];// 存入数字
看符号是什么,找对应的前,后两个数字,进行+ or -
第二步: (加入* / )
我的思路:
先遍历 * / 把它们都做完,不就回到第一步了,只剩 + -了
第三步:(加入 (), 括号用递归)
解决思路:先做出一个括号的
注意点:左括号和右括号的匹配问题,
找到最里面的括号,把它当成第二步,(这个就是第二步已经解决好的了)再层层递归,出来
第四步,分成 .c .h
即 多模块化
这里要理解,全局变量,局部变量,静态变量
https://blog.csdn.net/chemddd/article/details/103671518
关于递归
递归的思想很巧妙,但是难以理解,我学习了好几次,终于有所认识。递归看起来是自己调用自己,直觉上非常难以想象,但是联系到运算过程中的递归调用,也是一种调用而已,重点:它每次递归时,系统在原来的函数栈上开辟一个栈,这个栈里有局部变量和保存本次递归的运算结果的变量,随着更多的递归,栈一层一层地累积起来,而调用的递归函数在程序运行时就放在了代码区里、且一直在那里不动,栈和递归函数不在一个地方,因此递归本质上不过是函数调用。当递归开始结束后,最上一层栈消亡,把结果传递给下一层的栈,这样栈一层一层地消失和往下传递运算结果,最终得到了最终结果。如果递归达到了10层以上,这事儿也就机器能忍受,人嘛肯定受不了。
递归在解决很多重复性的问题上非常有用,比如二叉树的遍历,二分查找,快速排序,归并排序,但是得注意两点:
递归的终止条件一定要提供,不然递归绵绵无绝期而栈溢出
递归代码相比循环会很简洁,但是递归层次太多也会发生栈溢出。