当前位置:   article > 正文

递归 尾递归_什么是尾递归?

以下哪个选项描述了尾递归

递归 尾递归

Here you will learn about what is tail recursion with example.

在这里,您将通过示例了解什么是尾递归。

Tail recursion refers to recursive call at last line. The tail recursive functions considered better as the recursive call is at the last statement so there is nothing left to do in the current function. It saves the current function’s stack frame is of no use.

尾递归是指最后一行的递归调用。 尾部递归函数被认为更好,因为递归调用位于最后一条语句中,因此当前函数中无事可做。 保存当前函数的堆栈框架是没有用的。

Tail recursion can be eliminated by changing the recursive call to a goto preceded by a set of assignments per function call. This simulates the recursive call because nothing needs to be saved after the recursive call finishes. We can just goto the top of the function with the values that would have been used in a recursive call.

通过将递归调用更改为goto,并在每个函数调用之前分配一组分配,可以消除尾递归。 这模拟了递归调用,因为在递归调用完成之后不需要保存任何内容。 我们可以使用递归调用中使用的值转到函数顶部。

What is Tail Recursion?
Image Source图片来源
Tower of Honoi Problem is given below. It is an example of recursive function with tail recursion. 了Honoi问题塔的递归函数。 这是带有尾递归的递归函数的示例。

带有尾递归的递归函数TOH (Recursive Function TOH with Tail Recursion)

  1. void TOH(int n,char x,char y,char z)
  2. {
  3. if(n>0)
  4. {
  5. TOH(n-1,x,z,y);
  6. printf("\n%c-> %c",x,y);
  7. TOH(n-1,z,y,x); //tail recursion
  8. }
  9. }

没有尾递归 (Without Tail Recursion)

  1. void TOH(int n,char x,char y,char z)
  2. {
  3. char temp;
  4. label:
  5. if(n>0)
  6. {
  7. TOH(n-1,x,z,y);
  8. printf("\n%c-> %c",x,y);
  9. temp=x;
  10. x=z;
  11. z=temp;
  12. n=n-1;
  13. goto label;
  14. }
  15. }

翻译自: https://www.thecrazyprogrammer.com/2014/07/what-is-tail-recursion.html

递归 尾递归

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/116174
推荐阅读
相关标签
  

闽ICP备14008679号