- 论坛徽章:
- 2
|
回复 103# hbmhalley
也就是说:
- int factorial(int n) { return n<2? 1: n*factorial(n-1); }
复制代码 是递归而
- int factorial(int n, int p=1) { return n<2? p: factorial(n-1, n*p); }
复制代码 不是递归?
或者,再来个"分叉"的:
- int fibonacci(int n) { return n<2? n: fibonacci(n-1) + fibonacci(n-2); }
复制代码 是递归而
- int fibonacci(int n, int a=0, int b=1) { return n==0? a: fibonacci(n-1, b, a+b); }
复制代码 不是递归?
又或者那种始终没法转换为在常数空间内下达到线性的 —— 比如二叉树中序遍历 —— 才叫递归?
hbmhalley 发表于 2012-08-09 22:05
冒牌的意思就是,递归是把自己分裂成若干子问题,而你把自己“分裂”成一个子问题,实际上就是蜕了层皮,减了减肥,并没体现“分解问题”的作用。
正牌递归,就是非递归不可的递归,
好奇问问,对递归的这种定义是出自哪里?
hbmhalley 发表于 2012-08-09 22:05
就是划成若干子问题,缩写“分解”。递归与分治也不矛盾。这不重要。
我觉得很重要,因为我对递归这个词的理解里,没有包含必须分解为多个子问题。所以一听冒牌递归,简直吓尿了。
递归的这种定义,出处应该不需要我找吧?纯函数式语言虽不是主流,但也不少。按你的说法,他们天天都在用的那个就是冒牌的了。
或者就在前面几个回帖里就有一个定义,sicp称其为linear recursive process。
@starwing83,你看这是不是functional与imperative的区别。。。 |
|