第3周
函数的递归
函数的嵌套调用:
函数不能嵌套定义,但是能嵌套调用
fact里面嵌套了自己;
每次调用都会开出新的内存空间
递归调用的过程
cin.get()可以把空格和回车都读进去,遇到终止符号结束。
第四步读取换行符
切饼 等用递归解决递推
递推 递归区别
递归应用–重复模拟一个动作
反复重复一个动作。
这边是分解问题。从两头锊。
3个盘子,通过B把A的转移到C
移动3个盘子的问题,被简化为移动2个盘子问题。
单次完成的步骤,前后两次之间的关系,以及边界条件。
放苹果 --自动分析(分析个数)
如果盘子多,那肯定有空余盘子,所以可以把多余的丢掉。
把所有的放置方法都可以分为有盘子空,没有盘子空。
有点厉害啊。这思路无敌,主要分治的思想。
上面代码好像有点问题。不过思想很好。
小结
逆波兰表达式 --自动分析(分析个数)
利用switch可以简化if else语句
cin>>一个一个符号的读取。
习题课
这题的难处就是怎么把所有的情况都列举出来。
模拟题,这里面是前一天与现在的区别。
bool,int=f(str,s)这边是判断str从s之后上一次是否能匹配,和右括号位置。
这里通过全局变量的形式增加返回值,可以用括号表达式,(,,,,)最终返回的是括号最右边的表示式结果。
#include <iostream>
using namespace std;
bool b;
int f(char str[], int s){
if (strlen(str)==s)
{
return (b=true,-1);
}
else{
if (str[s]=='(')
{
int n;
(b, n) = f(str,s+1);
if (b==false)
{
return (b=false,n);
}
else
{
if (str[n]==')')
{
return f(str, n + 1);
}
else
{
return (b = false, n);
}
}
}
else
{
return (b = true, s);
}
}
}
int main(){
char str[100]; cin.getline(str, 100);
int n; n = f(str,0);
if (b==true&&n==-1)
{
cout << 'Y' << endl;
}
else
{
cout << 'N'<< endl;
}
return 0;
}
这代码真是给跪了。。。。