chapter_computational_complexity/iteration_and_recursion/ #694
Replies: 141 comments 175 replies
-
我算法小白理解的递归和尾递归,递归就好像是拿着个小本本,算一次,算不出答案,需要标记一下继续算,一直到最后一个答案算出来再根据标记往回总结答案,而尾递归则是算一次更新一下答案,所以到最后答案可以直接得出,这样的话感觉跟迭代很像啊 |
Beta Was this translation helpful? Give feedback.
-
简单查了一下好像支持尾递归优化的语言不多,相对主流一些的语言 Java、Python、Go 之类的都不支持。 |
Beta Was this translation helpful? Give feedback.
-
f(n),f是什么意思 |
Beta Was this translation helpful? Give feedback.
-
希望添加迭代器的代码 |
Beta Was this translation helpful? Give feedback.
-
我愿称之为最强教程。这一章终于完全理解了迭代和递归的不同,终于完全理解了尾递归。豁然开朗的爽感让我继续如饥似渴地阅读下面的内容! |
Beta Was this translation helpful? Give feedback.
-
很多语言没有对尾递归进行优化,数据量不确定的情况下,用递归风险岂不是很大 |
Beta Was this translation helpful? Give feedback.
-
开头第一段话因为我不是很懂,所以去问了一下GPT,回复说:“迭代和递归都是程序中常见的控制结构,而不是程序结构本身。”这个回答是正确的吗?以及控制结构和程序结构的同异是什么呢?🤔 |
Beta Was this translation helpful? Give feedback.
-
比作挖坑的话 然后迭代解题关键就是计算好每次挖多少,迭代每次挖的土都是固定的重量,最后只管算挖了几次就能知道。 迭代跟递归配合就是 在原地挖坑?不用往前走也不用去下一层 直接原地计算?有点迷糊了。 int fibonacci(int n) {
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;
}
int prev = 0; // 第一个斐波那契数
int current = 1; // 第二个斐波那契数
int result = 0; // 存储计算的结果
for (int i = 2; i <= n; ++i) {
result = prev + current;
prev = current;
current = result;
}
return result;
} chatgpt的迭代加递归 原地搞三个坑prev current result |
Beta Was this translation helpful? Give feedback.
-
例如在以下代码中,条件变量,每轮进行了两次更新,这种情况就不太方便用 for 循环实现。 /* while 循环(两次更新) */
int whileLoopII(int n) {
int res = 0;
int i = 1; // 初始化条件变量
// 循环求和 1, 4, ...
while (i <= n) {
res += i;
// 更新条件变量
i++;
i *= 2;
}
return res;
} 这个地方提到用for循环不好实现,可是 int res = 0;
for (int i1 = 1; i1 <= n; ) {
res += i1;
i1++;
i1 *= 2;
} 这样写也一样能实现的,感觉和while没啥大的区别 |
Beta Was this translation helpful? Give feedback.
-
分治是一种算法设计思想,它通过将问题划分为多个相同或相似子问题,并分别解决这些子问题,最后将子问题的解合并起来得到原始问题的解。分治思想通常包括三个步骤:分解、解决和合并。
分治思想通常用于解决问题的规模较大、复杂度较高的情况,它可以将原问题划分为多个较小的子问题,从而简化原问题的求解过程。常见的应用包括归并排序、快速排序、二分搜索等。通过分治思想,可以提高算法的效率和可扩展性。分治是一种算法设计思想,它通过将问题划分为多个相同或相似子问题,并分别解决这些子问题,最后将子问题的解合并起来得到原始问题的解。分治思想通常包括三个步骤:分解、解决和合并。
分治思想通常用于解决问题的规模较大、复杂度较高的情况,它可以将原问题划分为多个较小的子问题,从而简化原问题的求解过程。常见的应用包括归并排序、快速排序、二分搜索等。通过分治思想,可以提高算法的效率和可扩展性。 |
Beta Was this translation helpful? Give feedback.
-
”普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下文。” |
Beta Was this translation helpful? Give feedback.
-
C#的命名有点不友好, |
Beta Was this translation helpful? Give feedback.
-
问在for循环中什么c++里面是++i,c中就是i++ |
Beta Was this translation helpful? Give feedback.
-
请问,我用 print(fib(4)); 运行得到的结果是2,这和理解上的不一致,在本本上演算也是2,请问是哪里做的不对吗? |
Beta Was this translation helpful? Give feedback.
-
小白 不知道我理解的有没有错误:尾递归 就是在调用自身的同时,计算出当前调用层的结果,并且一起传递。这样 归 的时候 直接返回结果值。但是要返回n次 |
Beta Was this translation helpful? Give feedback.
-
纯小白表示本书配合AI食用确实可以大大提升对于算法的理解🤩 |
Beta Was this translation helpful? Give feedback.
-
刚看到递归,感觉绕进去绕晕了,但是根据断点和图表一步步跑,才明白原来是相当于从底层开始,从0,1,1,2 一直往上抛,感觉茅塞顿开,太感谢了 |
Beta Was this translation helpful? Give feedback.
-
请问普通递归是不是可以理解为,每次向下递一次,就需要在栈中保存一下该返回值,直到最后一次递归触发终止条件,开始一次一次的返回第一次递归所依赖的小结果,所以第一次递归的空间一直都不能释放。 |
Beta Was this translation helpful? Give feedback.
-
似懂非懂,小白第一天打卡。 |
Beta Was this translation helpful? Give feedback.
-
看不懂,晕了。我不如先去看后面的章节。 |
Beta Was this translation helpful? Give feedback.
-
理解递归用了我一晚上。。。不知道后面还能不能把递归运用起来 |
Beta Was this translation helpful? Give feedback.
-
感觉代码里的注释插在代码里有点乱,为什么不统一放在每行代码的右边的呢,代码和注释一左一右也条理清晰,符合习惯。 |
Beta Was this translation helpful? Give feedback.
-
看了评论区的讨论,于我本人而言最容易理解的方式是:函数运行到return后,就相当于把本次整个函数运行结束了,就可以释放存储空间了。所以尾递归的空间占用要比普通递归小。 |
Beta Was this translation helpful? Give feedback.
-
Alexury打卡 |
Beta Was this translation helpful? Give feedback.
-
递归可以用循环代替 |
Beta Was this translation helpful? Give feedback.
-
简洁易懂!!我看课本和看各种的网课都不甚理解递归的底层原理到底是什么,看了这个真的一下子就懂了,k神我要誓死追随你 |
Beta Was this translation helpful? Give feedback.
-
ai写的斐波那契数列那个的尾递归: |
Beta Was this translation helpful? Give feedback.
-
chapter_computational_complexity/iteration_and_recursion/
动画图解、一键运行的数据结构与算法教程
https://www.hello-algo.com/chapter_computational_complexity/iteration_and_recursion/
Beta Was this translation helpful? Give feedback.
All reactions