如何系统地遵循递归?

伊兰·艾泽曼(WS)

好吧,我有很多“ C语言”测试都涉及查找给定函数的输出,此外,我需要精确解释它的目的。其中一些是递归函数。而且,当我遇到递归时,我总是在努力寻找如何示意性地遵循它的方法,即使我成功了,有时我也可能不明白递归函数目的是什么

这是两段代码:

主要的

#include <stdio.h>
#include <conio.h>

int f2(int *a, int n, int x);
int main()
{
  int a[6] = {4, 3, 4, 2};  
  printf("%d\n", f2(a, 4, 5)); 
  getch();
}

f2功能:

int f2(int *a, int n, int x)
{
  if(n>0 && x!=0){
    return (f2(a+1,n-1,x-a[0]) ? 1 : f2(a+1,n-1,x));
  }
  return (x ? 0 : 1);
}

好吧,该函数的“目的”是检查数组中是否存在一组数字,这些数字的总和将得出x的值。(在此特定示例中为x = 5)。在这种情况下,它将返回true,因为2,3位于数组内部并且2 + 3 = 5。

我的问题是:在纸面上,我如何能示意地遵循它并理解其目的。或者,你们将如何处理此类问题?任何帮助都非常感谢!!

修剪

我不会添加出现在我前面的示例。他们本来可以从我自己的演讲材料中获取的。

我想要@Edwin给您的三个部分:这些是您的关键工具。我通常会颠倒前两个。适用于您的特定问题:

终止:只要n为正x不为0,我们就会继续。当我们通过这些检查中的任何一项时,都会返回x == 0(将返回值解释为false / true)。

返回结果:请注意,此布尔值也是唯一的返回结果。

递归:我们尝试以较小的问题调用函数:

  • 将第一个元素从数组a中切下
  • x减去该值
  • 递减n

{请注意到目前为止所学的内容:n是一个计数器;x是一个总和,我们得到了最终结果;a是组件列表。}

现在,如果此返回成功(返回true),则将该true传递回调用堆栈(在三元表达式中1)。如果失败,我们将按照上面的项目符号步骤重试,除非不减少x然后将此结果传递回该行,无论其值如何。

因此,故障如下所示:

  • 如果我们到达x为0的位置,那么在n降至0之前的任何时间,我们都会获胜。
  • 如果当n等于0时x = 0,则失败。
  • 在此之前,我们的“尝试下一步”步骤是获取下一个可用的号码。从x中减去它,然后用(a)列表的其余部分再次调用我们自己;(b)少尝试一次(即n),并且(c)适当减少运行总和。如果不起作用,请跳过此号码,然后尝试下一个号码。

顺便说一句,最后一个通话的中间项应该是n而不是n-1吗?当我们跳过a [0]时,我们并没有用完猜测。


就是说,我真的很怀疑本课程试图教您什么。除非这个问题是一个孤立的例子,否则我不会认为它试图将您变成专业的程序员。该代码未注释,标识符来自打卡日期,返回值是“幻数”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使Okular遵循系统主题?

来自分类Dev

如何简单地遵循代码,Dataframe,迭代

来自分类Dev

如何递归地填充TreeView

来自分类Dev

如何递归地对python对象进行json

来自分类Dev

如何递归地找到特里树的高度

来自分类Dev

您如何递归地实现“显示”尾巴?

来自分类Dev

默认的svn状态是递归的,如何非递归地svn状态?

来自分类Dev

系统如何使映像准确地“可引导”?

来自分类Dev

如何让tar遵循除一个递归符号链接以外的所有符号链接

来自分类Dev

Matlab中的摆动弹簧ODE系统-如何使位置矢量遵循路径?

来自分类Dev

如何使 pygame 精灵正确地遵循不同速度的航点列表?

来自分类Dev

(ASDF 3)是否可以递归地在子目录中加载系统?

来自分类Dev

递归二进制搜索无法系统地工作

来自分类Dev

如何强制Hibernate Validator递归地验证字段(级联)?

来自分类Dev

如何递归和异步地构建大小未知的树?

来自分类Dev

如何递归地渲染react.js中的子组件

来自分类Dev

Python:如何递归地在打印中应用__str__

来自分类Dev

使用Underscore,如何递归地展平对象数组?

来自分类Dev

如何递归地模拟随机游走?无循环(Python)

来自分类Dev

如何仅在ruby脚本中递归地更改文件权限

来自分类Dev

如何在通用Lisp中递归地添加列表?

来自分类Dev

如何通过乘以数字递归地减少数字?

来自分类Dev

如何使用python硒从页面递归地抓取表格

来自分类Dev

如何在elisp中递归地传递函数?

来自分类Dev

如何递归地从R中的父子层次结构返回数据?

来自分类Dev

递归地实现Radix排序-如何在最后打印元素?

来自分类Dev

如何在php中递归地展平树数组?

来自分类Dev

如何递归地复制一个FormGroup?

来自分类Dev

如何递归地替换目录名称中的连续字符

Related 相关文章

  1. 1

    如何使Okular遵循系统主题?

  2. 2

    如何简单地遵循代码,Dataframe,迭代

  3. 3

    如何递归地填充TreeView

  4. 4

    如何递归地对python对象进行json

  5. 5

    如何递归地找到特里树的高度

  6. 6

    您如何递归地实现“显示”尾巴?

  7. 7

    默认的svn状态是递归的,如何非递归地svn状态?

  8. 8

    系统如何使映像准确地“可引导”?

  9. 9

    如何让tar遵循除一个递归符号链接以外的所有符号链接

  10. 10

    Matlab中的摆动弹簧ODE系统-如何使位置矢量遵循路径?

  11. 11

    如何使 pygame 精灵正确地遵循不同速度的航点列表?

  12. 12

    (ASDF 3)是否可以递归地在子目录中加载系统?

  13. 13

    递归二进制搜索无法系统地工作

  14. 14

    如何强制Hibernate Validator递归地验证字段(级联)?

  15. 15

    如何递归和异步地构建大小未知的树?

  16. 16

    如何递归地渲染react.js中的子组件

  17. 17

    Python:如何递归地在打印中应用__str__

  18. 18

    使用Underscore,如何递归地展平对象数组?

  19. 19

    如何递归地模拟随机游走?无循环(Python)

  20. 20

    如何仅在ruby脚本中递归地更改文件权限

  21. 21

    如何在通用Lisp中递归地添加列表?

  22. 22

    如何通过乘以数字递归地减少数字?

  23. 23

    如何使用python硒从页面递归地抓取表格

  24. 24

    如何在elisp中递归地传递函数?

  25. 25

    如何递归地从R中的父子层次结构返回数据?

  26. 26

    递归地实现Radix排序-如何在最后打印元素?

  27. 27

    如何在php中递归地展平树数组?

  28. 28

    如何递归地复制一个FormGroup?

  29. 29

    如何递归地替换目录名称中的连续字符

热门标签

归档