首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在没有计算机的情况下可视化和解决递归问题

在没有计算机的情况下可视化和解决递归问题
EN

Stack Overflow用户
提问于 2013-08-22 17:26:03
回答 3查看 98关注 0票数 1

假设我有这样的东西:(预测输出)

代码语言:javascript
运行
复制
void abc (char *s){

    if(s[0]=='\0')
        return;

    abc(s+1);
    abc(s+1);

    printf(“%c “, s[0]);
}

这并不难解决,但是我花了太多的时间来做,而且我不得不重复2-3次这样的问题,因为我忘记了变量的递归和值(特别是当有2-3个这样的递归语句时)

当必须解决这些问题时,有什么好的方法可以使用吗?

EN

回答 3

Stack Overflow用户

发布于 2013-08-22 18:35:12

基本技术是首先从一小部分输入开始。然后试着用一个更大的。然后试着用一个更大的。对于递归函数,应该出现一种模式,让您在知道前一个函数的外观的情况下预测下一个函数的外观。

所以,让我们从一个空字符串开始。很简单,什么都没有打印出来。

代码语言:javascript
运行
复制
input: ""
output:

接下来是一个长度为1的字符串。几乎同样简单的是,两个递归调用都不做任何事情(空字符串的情况),然后打印字符串的字符。

代码语言:javascript
运行
复制
input: "z"
output: z

接下来是一个长度为2的字符串。每次递归调用都会打印第二个字符(长度为一个大小写的字符串),然后打印第一个字符。

代码语言:javascript
运行
复制
input: "yz"
output: zzy

因此,让我们尝试预测长度为3的字符串的情况。将发生的情况是,不包括第一个字符的子字符串被处理两次,然后打印第一个字符。该子字符串是长度为两种情况的字符串。所以:

代码语言:javascript
运行
复制
input: "xyz"
output: zzyzzyx

因此,现在应该很清楚如何在给定当前输出序列的情况下导出下一个输出序列。

票数 1
EN

Stack Overflow用户

发布于 2013-08-22 18:38:36

拿一叠适当大小的索引卡。开始跟踪对递归函数的初始调用。迟早你会(除非你在追踪一个无限递归)跟踪一个不进行递归调用的调用的执行,在这种情况下,将返回值复制回你原来的卡片。

在卡片上包括“转到卡片X”和“来自卡片Y”可能是个好主意。

在复杂的情况下,你可能会发现创建一个以上的卡片堆栈来跟踪你的函数调用是很有用的,哦,为什么不叫它们调用堆栈呢?

票数 0
EN

Stack Overflow用户

发布于 2013-08-22 18:40:03

分析递归最简单的例子是Fibonacci and Factorial function

这将帮助您以更好的方式分析递归函数。无论何时您忘记了递归函数,只要回忆一下these示例即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18376504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档