x******m 发帖数: 736 | |
d****n 发帖数: 1637 | 2 基本的结构就是
1,确定终止条件,
2,起始设定
3,recursion call
int fib(int n){
if (n==0|| n==1)//起始+终止设定
return n;
return fib(n-1)+fib(n-2);//recursion call
}
一定要考虑什么是终止条件判定。不要漏过任何 senario
【在 x******m 的大作中提到】 : 复杂一点,不知道从何入手,难啦~~~
|
x******m 发帖数: 736 | 3 关键是有的时候你看不出来能用recursion解决问题。不像考试,作业,题目要求用
recursion。 |
b***i 发帖数: 3043 | 4 recursion高不定就不适合编程的工作。虽然,可能一个软件可能就需要一个recursion.
【在 x******m 的大作中提到】 : 关键是有的时候你看不出来能用recursion解决问题。不像考试,作业,题目要求用 : recursion。
|
O*******d 发帖数: 20343 | 5 recursion和写loop一样,需要有起始值和终止条件。还要有变化值使终止条件可以达
到。 可以从简单练习做起。 例如遍历多叉树,比如把一个folder里的所有folder和文
件的名字都印出来。再简单的练习可以把一段句子反转。
void Reverse(char* begin, char* end)
{
if(end > begin)
{
char temp = *begin;
*begin = *end;
*end = temp;
Reverse(begin + 1, end - 1);
}
}
char str[] = "ABCDEFG";
Reverse(str, str + strlen(str) - 1);
如果写成循环
char* begin = str;
char* end = str+ strlen(str) - 1;
while(end > begin)
{
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
这里的关键是一旦终止条件满足了,recursive函数就必须要退出,就跟循环终止一样。
【在 x******m 的大作中提到】 : 复杂一点,不知道从何入手,难啦~~~
|
r*******n 发帖数: 3020 | 6 可以参考数学归纳法
假设你已经解决了size为K的问题,现在要解决K+1的问题,
如果你能解决这一步就可以考虑用递归。
注意不要考虑计算机是如何运行你的递归程序,把它当成黑盒子。
【在 x******m 的大作中提到】 : 关键是有的时候你看不出来能用recursion解决问题。不像考试,作业,题目要求用 : recursion。
|
w**z 发帖数: 8232 | 7 谁工作中用过recursion? 我只用过一次 , traverse directory.
【在 x******m 的大作中提到】 : 复杂一点,不知道从何入手,难啦~~~
|
x****u 发帖数: 44466 | 8 树状结构很常见
【在 w**z 的大作中提到】 : 谁工作中用过recursion? 我只用过一次 , traverse directory.
|
w**z 发帖数: 8232 | 9 树还自己写?
【在 x****u 的大作中提到】 : 树状结构很常见
|
r*******n 发帖数: 3020 | 10 是已经在那了,比如tree view的控件,
遍历每个子控件的状态
【在 w**z 的大作中提到】 : 树还自己写?
|
|
|
O*******d 发帖数: 20343 | 11 我用的很多。 例如在GUI中,widget一般都是树结构。 大窗户里有小窗户,小窗户里
有小小窗户。如果要在这个树结构中搜索,就要recursion。我还写过高次内插值的
class template,其方次是不定的。 可以是一次,二次,三次方的插值interpolation
。 就是recursive的一层层地套。
【在 w**z 的大作中提到】 : 谁工作中用过recursion? 我只用过一次 , traverse directory.
|
t****t 发帖数: 6806 | 12 variadic template必须recursive, enough said.
interpolation
【在 O*******d 的大作中提到】 : 我用的很多。 例如在GUI中,widget一般都是树结构。 大窗户里有小窗户,小窗户里 : 有小小窗户。如果要在这个树结构中搜索,就要recursion。我还写过高次内插值的 : class template,其方次是不定的。 可以是一次,二次,三次方的插值interpolation : 。 就是recursive的一层层地套。
|
O*******d 发帖数: 20343 | 13 我用的就是在现在的C++里用recursion. 极度简化后就是下边的思路
template
class Fool
{
public:
Fool() { data = N; }
unsigned int data;
Fool nextLevel; // recursively create next level.
void printData() { cout << data; nextLevel.printData(); }
};
// Specialize to terminate recursion
template<>
class Fool<0U>
{
public:
Fool() { data = 0U; }
unsigned int data;
void printData() { cout << data; }
};
Fool<9U> fool;
fool.printData(); // print 9876543210
这个是一层层套起来的template。 如果没有最后那个Fool<0U>, compiler会发疯。
【在 t****t 的大作中提到】 : variadic template必须recursive, enough said. : : interpolation
|
O*******d 发帖数: 20343 | 14 如果要做成二叉树
template
class Fool
{
public:
Fool() { data = N; }
unsigned int data;
Fool nextLevelLeft; // recursively create next level.
Fool nextLevelRight;
}; |
t****t 发帖数: 6806 | 15 this is not variadic template...
【在 O*******d 的大作中提到】 : 我用的就是在现在的C++里用recursion. 极度简化后就是下边的思路 : template : class Fool : { : public: : Fool() { data = N; } : unsigned int data; : : Fool nextLevel; // recursively create next level. : void printData() { cout << data; nextLevel.printData(); }
|
O*******d 发帖数: 20343 | 16 我知道不是。也没有打算用。只是说说怎样在传统的template的创建上做recursion。
【在 t****t 的大作中提到】 : this is not variadic template...
|
w**z 发帖数: 8232 | 17 c++很久不用了,UI 从来没写过, 怪不得不常用,recursion.
【在 t****t 的大作中提到】 : variadic template必须recursive, enough said. : : interpolation
|
b*******s 发帖数: 5216 | 18 你就这样理解:一个大问题是由很多状态的子问题组成的,但是某个状态的子问题可以
得到自身的解,然后返回上一级的子问题,直到最终返回主问题
【在 x******m 的大作中提到】 : 复杂一点,不知道从何入手,难啦~~~
|
s*w 发帖数: 729 | 19 这个太搞笑了吧,recursion 要不懂,编程不及格,cs 绝对拿不到学位
recurvion 是真不懂
【在 x******m 的大作中提到】 : 复杂一点,不知道从何入手,难啦~~~
|
x****u 发帖数: 44466 | 20 树形结构比如目录。
【在 w**z 的大作中提到】 : 树还自己写?
|
O*******d 发帖数: 20343 | 21 写GUI基本上就是自己建一个树结构。窗户套窗户。
【在 x****u 的大作中提到】 : 树形结构比如目录。
|