由买买提看人间百态

topics

全部话题 - 话题: 递归
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
A*****i
发帖数: 3587
1
高中dropout经验尚浅,做过的分布式项目没见过用递归的,当然外组做的data
analysis倒是大片大片的scala和erlang,递归这玩意跟软件设计完全不搭边,感觉就
是搞数学用的
j*********6
发帖数: 407
2
之前开过一篇帖子讨论递归可不可以算是不是用额外空间 因为如果递归的时间复杂度
时logN 那么即使N是1000000,最终的空间也只不过是6。如果真的没有别的不使用空间
的方法 可以和面试官讨论一下递归是否可以算作O1的空间
x*****p
发帖数: 1707
3
来自主题: WaterWorld版 - 素数的数学递归定义的问题
我们假设不知道什么叫素数,我们对正整数集合进行如下的定义来定义素数。(这是从
链接上取下来的,也是I63的定义)
(1) 1不是素数 (base case)
(2) a是素数当且仅当a不能被任何小于它的素数整除。
我曾经多次指出,这个定义在用素数定义素数,是不正确的。但看到很多的反驳如下。
1不是素数, 我们考察2,发现小于2的素数集合为空集,于是2为素数。以此再往下递归
,得出所有素数的定义。我想昨天深入讨论此内容的人,都不会反对我的总结吧。关于
"小于2的素数集合为空集"推出"2为素数",因我的不慎,还做出过郑重道歉。
好,我们仿造这种递归定义,来定义偶数。
我们假设不知道什么叫偶数,我们对非负整数集合进行如下的定义来定义偶数。
(1) 0不是偶数 (base case)
(2) a是偶数当且仅当a与任何小于它的偶数之差为2的倍数。
我从base case开始。0不是偶数。我们考察下一个数1,发现小于1的偶数集合为空集,
于是1为偶数。以此递归,我们得出的偶数是1, 3, 5, 7, ...。实际上,这与我们传统
定义的偶数完全不一样。
大家发现问题在那里么?
m**x
发帖数: 8454
4
来自主题: WaterWorld版 - 素数的数学递归定义的问题
不带像lz这样煽自己耳光的好不好
发信人: xiongyp (dreamrain), 信区: WaterWorld
标 题: Re: 关于使用反证法证明 "素数有无穷多个"
发信站: BBS 未名空间站 (Thu May 23 17:23:27 2013, 美东)
我承认,但这个等价不明显,需要有完备性的证明。我同样给出的另一个类似的递归定
义,就不完备。对于一个不明显的递归定义,有必要进行说明或者证明。楼主在这个问
题上一笔跳过,是不严谨的。

发信人: xiongyp (dreamrain), 信区: WaterWorld
标 题: Re: 有人认为反证法的证明过程中不能用某些定理,某些等价定义,我问
发信站: BBS 未名空间站 (Fri May 24 09:02:54 2013, 美东)
等价定义可以,但I63对素数的递归定义,与素数本身的定义不等价。
,.
t**********s
发帖数: 930
5
比如下面这个同时求出一个数组中最大和最小值的算法,我已算出其元素之间的比较次
数是3n/2-2,这要比分别扫描数组两次所比较次数2*(n-1)要少。
我的问题是如何让这个递归函数自己记下算出递归的次数?
我对递归函数间如何传递数据很糊涂。
vector minmax( vector V, int l, int u )
{
int m;
vector M( 2 ), M1( 2 ), M2( 2 );

if( u == l ) // one element - no comparisons needed
{
M[0] = V[l]; M[1] = V[u];
return M;
}
if( u-l == 1 ) // two elements - only one comparison
{
if( V[l] <= V[u] )
{
M[0] = V[l]; M[1] = V[u];
c*****y
发帖数: 90
6
来自主题: JobHunting版 - 问个题,用递归方法
1004%10再/10就可以得到4、0、0、1呀。不单独处理if(num/10=0),我觉得就不会知道
何时跳出
递归,例如在1004这个例子中,你就不知道在1这个数字处要跳出递归。
r****o
发帖数: 1950
7
非递归求二叉树的高度,可以用按层次遍历的方法,层数就是高度。
还有其他方法可以非递归求二叉树高度吗?
c********1
发帖数: 161
8
这个问题就难说了,不是一句两句说得清的,可以自己体会下merge sort和quick sort
的算法空间复杂度。另外,递归往深了说就是stack,既然自己外部调用stack可以做到
inplace和计算空间复杂度,那么递归用program stack也就可以用同样的方法计算了。
g*****i
发帖数: 2162
9
递归的很容易写,有非递归的解法呢?
b******v
发帖数: 1493
10
来自主题: JobHunting版 - 谈谈大家用递归的历史吧
binary search
后来知道binary search非递归的方法,觉得更好用
还有BST里也经常用递归,非常简洁
a****l
发帖数: 8211
11
来自主题: JobHunting版 - 谈谈大家用递归的历史吧
树型结构里找东西不是需要用递归.我现在做诸如扫目录等事就不用递归.
p*****2
发帖数: 21240
12
什么是尾递归呀?
p*****2
发帖数: 21240
13
什么是尾递归呀?
p*****2
发帖数: 21240
14
1. 如果做动态规划,依赖的参数是多维的,应该怎么办?我看到过的尾递归只解决了
自变量为一维的问题。
感觉这个可以解决呀。
p*****2
发帖数: 21240
15

top
我刚写了一个尾递归,解决2维dp,你帮我看看。
http://www.mitbbs.com/article_t/JobHunting/32313551.html
i**********e
发帖数: 1145
16
orz.. 哈哈,搞糊涂了。
这个非递归还是不好写,面试时写递归的已经很好了。
b*****n
发帖数: 143
17
来自主题: JobHunting版 - postfix evaluation的递归解法
Postfix evaluation 的经典解法是把数字放到堆栈里,遇到算符就把最上面的两个数
字拿出来做计算,再把结果放进堆栈,以此类推,直到结束。
还有一个从右往左扫描的递归解法:
// 假设postfix数字只有一位
double eval_postfix(const string& postfix, size_t& idx) {
char c = postfix[idx];
if (c == '+' || c == '-' || c == '*' || c == '/') {
double right = eval_postfix(postfix, ++idx);
double left = eval_postfix(postfix, ++idx);
return calc(left, c, right);
}
else
return c - '0';
}
既然堆栈的解法是从左往右扫描,有没有从左往右的递归解法? 大家讨论讨论。
p*******8
发帖数: 344
18
RT, 比如subsets, permutation, 电话号码等,需要能写出非递归的算法吗?对于非递
归算法,一般的思路是怎样的?谢谢!
j*****y
发帖数: 1071
19
permutation 可以用 next permuation 实现非递归
f*******t
发帖数: 7549
20
我觉得面试中不太可能写出非递归算法
p*******8
发帖数: 344
21
那我就不打算去弄非递归的了,主要也就面试用用,真问到就说不会了,我也觉得多数
面试也没这种要求
h**6
发帖数: 4160
22
我现在能不用递归就不用,尽量避免DFS,改写BFS。
f*********g
发帖数: 110
23
leetcode 上Unique Paths, 我写了一个递归,但不是很明白这个递归的时间复杂度和
空间复杂度。我觉得空间复杂度是O(m*n),时间复杂度是O(m*n).不知道对不对,请大家
指点。
public int uniquePaths(int m, int n) {
if(m==1|| n==1) return 1;
return uniquePaths(m-1,n)+uniquePaths(m,n-1);
}
p*****2
发帖数: 21240
24
来自主题: JobHunting版 - 关于尾递归

尾递归的实现,不过Scala不支持这种递归的优化。
def H(value:Double, n:Int):Double={
H_helper(Array(value),n)(0)
}

def V(value:Double, n:Int):Double={
V_helper(Array(value),n)(0)
}

def H_helper(arr:Array[Double], n:Int):Array[Double]=n match{
case 0 => caclV(arr)
case _ => {
val ar=new Array[Double](arr.length*2)
for(i<- 0 until arr.length) {
ar(2*i)=arr(i)-1
ar(2*i+1)=arr(i)+1
}
... 阅读全帖
b*****o
发帖数: 715
25
来自主题: JobHunting版 - 关于尾递归
硬币找零问题(100用1,5,10,25有几种表示方法)能不能写成尾递归?
我只能想出用普通递归或者memoization的办法。
p*****2
发帖数: 21240
26
来自主题: JobHunting版 - 关于尾递归

miss掉的大牛的回复。感觉你的理解稍微有点问题。我是这样理解的。
1. 尾递归的本质就是循环
2. 纯FP是没有循环的,所以才需要尾递归。如果有循环的话,确实没必要这么搞。
r********d
发帖数: 7742
27
来自主题: JobHunting版 - 递归这个概念实在是太重要了
就这一个概念,就主导了可超过一半的主要算法和超过一半的主要数据结构。
一定要好好理解啊。
要理解递归,先要理解递归啊。
g****y
发帖数: 2810
28
来自主题: JobHunting版 - 递归这个概念实在是太重要了
一切递归都可以写成非递归的形式。
r********d
发帖数: 7742
29
来自主题: JobHunting版 - 递归这个概念实在是太重要了
尾递归就是伪递归,咱们是不是把它转换成循环就好了?
z****e
发帖数: 54598
30
当然算咯
而且一般写dp都是用循环实现的
而不是递归,递归效率偏低

...
g**G
发帖数: 767
31
DP一般你会写出最优的子问题的递归方程对吧,其实就是递归
只不过一般DP是自底向上的,Recursion+cache是自顶向下的,写的顺序不一样
DP效率高,但理解起来可能比较困难
Recursion+cache的话,想起来比较顺溜,但是其实虽然中间结果cache了,但重复的
function call还是太多了,比dp效率低
r*******h
发帖数: 315
32
最直观的递归往往会重复计算一个子问题,DP主要目的是解决子问题的重复解带来的指
数级开销,但是并不意味着DP不能和递归共存。
b*********n
发帖数: 368
33
来自主题: JobHunting版 - 面试时 迭代还是递归
小弟外行,在刷leetcode,请问在时间和空间复杂度相同的情况下,递归和迭代哪个更
好,自己感觉递归更好些,逻辑清晰,不知道面试时有什么要求吗?
a**********0
发帖数: 422
34
来自主题: JobHunting版 - reorder list 递归方法超时
不递归无非就是分成两半 后一办reverse 然后插入到第一份去 我懒得写这么多代码
于是用了递归方法 结果超时 在自己电脑上跑了几个小case 都过了 不知道大家什么看
法 又超时了!
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {

public void reorderList(ListNode head) {

if(head == null)
return;

if(head.next ==null)
return;

if(head.next.next == null)
ret... 阅读全帖
m*********a
发帖数: 3299
35
Given n pairs of parentheses, write a function to generate all combinations
of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
递归很容易
void generateParenthesisRecr(string str,int n,int l,int r,vector&
result){
if (l==n && r==n){
result.push_back(str);
return;
}
if (l if (l>r) generateParenthesisRecr(str+")",n,l,r+... 阅读全帖
m*********a
发帖数: 3299
36
大家很牛啊,想得清楚>2可能的非递归的
左右二种选择就比较难了非递归就比较难了
h*******e
发帖数: 1377
37
好像之前听peking2 二爷提过尾递归。
h*******e
发帖数: 1377
38
看来作分布式的话用到递归不多哦.
h*******e
发帖数: 1377
39
Can every recursion be converted into iteration?
http://stackoverflow.com/questions/931762/can-every-recursion-b
还有人说有什么 church turning 理论证明 递归都能变成迭代,困惑了。。。到底哪
个说的对。
s**x
发帖数: 7506
40
关键是面试者对这个怎么定义, 稀里糊涂的面试者还是很多的, 所以, 沟通时第一
位的。
常识是递归使用stack to store a lot of things (return address, frame pointer,
parameters etc) on each call, 所以递归显然不是 O(1) space, 除非只调用 有限
次数。 说得时候尽量浅显易懂, 如果面试者水平有限, frame pointer 之类的就不
用提了, LOL.
s****a
发帖数: 794
41
来自主题: JobHunting版 - 很多连个递归都写不出来
如果是没想到要递归的话 可能是一时蒙住了或者正好碰上知识盲点 这个可能还是要看
其他人的面试结果综合决定 但是如果是在理解了算法后还不能顺利写出递归 那就是写
代码的能力有问题 基本上就是red flag

发帖数: 1
42
来自主题: JobHunting版 - 很多连个递归都写不出来
给个不能用递归的理由?


: 谁TM在工作的时候用递归,早大巴掌甩脸上了

x*****p
发帖数: 1707
43
来自主题: WaterWorld版 - 素数的数学递归定义的问题
我开此贴的目的,是为了证明,对一个概念的定义,是不能用递归方法来进行的,这也
是I63开的高楼的错误所在。因为递归定义的base case的判断,就是来源于一个概念的
原始定义。
x*****p
发帖数: 1707
44
来自主题: WaterWorld版 - 素数的数学递归定义的问题
昨天我的很多回帖,许多人看不懂。我质疑在递归定义中1为什么不是素数,许多人觉
得这是再明显不过的事情,可是在离开素数原始定义的前提下,这却很不明显。所以我
今天开贴举一反例,证明递归定义的错误所在。
j****q
发帖数: 204
45
来自主题: WaterWorld版 - 素数的数学递归定义的问题
大哥。。你的递归定义没有问题啊,只是你说的偶数其实是公认的奇数而已,原因就在
于你的base case和本该定义偶数的base case不一样。
那么你是不是认为把你的base case改为0是偶数,你的递归定义仍然是错的?因为你不
知道什么偶数?
p*****2
发帖数: 21240
46
来自主题: Programming版 - 关于尾递归 (转载)
【 以下文字转载自 JobHunting 讨论区 】
发信人: peking2 (scala), 信区: JobHunting
标 题: 关于尾递归
发信站: BBS 未名空间站 (Tue Jan 29 14:37:44 2013, 美东)
大家能不能给点例子不能转变成尾递归的?我想写写看。谢谢。
e****d
发帖数: 333
47
对,就是BST不是BT。
怎么用栈替代递归呢?有没有通用的算法,把递归转化为栈?
z****e
发帖数: 54598
48
来自主题: Programming版 - 丰田在嵌入式系统里用递归
呸,java也不用递归,fp才用递归,估计是fp转行的
g*******t
发帖数: 7704
49
来自主题: Programming版 - 丰田在嵌入式系统里用递归
递归就怕堆栈不够,
能写出递归的都不是学生了,
汽车里的电脑板,就巴掌大,ram肯定没多少,堆栈都是在ram里,
如果学过单片机, 堆栈一般是在内存的最底部,
G**Y
发帖数: 33224
50
来自主题: Programming版 - 所谓FP就是 递归+pattern matching?
每次递归得多少overhead呀,
现在compiler能提高递归的效率吗?
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)