VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 477|回复: 4

C++的递归调用?

[复制链接]
61_avatar_middle
最佳答案
0 
donate_vip 发表于 2019-3-18 13:56:40 | 显示全部楼层 |阅读模式
3驿站币
那位大神可以把递归调用详细的讲一下,学C++是讲到递归的时候很不懂。C++的递归调用?

最佳答案

查看完整内容

递归是二叉树遍历的常用方法。常见于树控件,骨骼动画,文件夹遍历等。以文件夹遍历示例,举一反三。 #include "stdafx.h" #include #include #include using namespace std; void listFiles(const char * dir); int main() { char *dir = "."; cout




上一篇:strcmp
下一篇:易语 转 C语言 WSARecvFrom 类型不对老是蹦
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-18 13:56:41 | 显示全部楼层
递归是二叉树遍历的常用方法。常见于树控件,骨骼动画,文件夹遍历等。以文件夹遍历示例,举一反三。
#include "stdafx.h"
#include <iostream>
#include <cstring>        
#include <io.h>
using namespace std;

void listFiles(const char * dir);

int main()
{
        char *dir = ".";
        cout << "当前文件夹内子目录文件列表" << endl;
        listFiles(dir);
        return 0;
}

void listFiles(const char * dir)
{
#define MAX_PATH 260
        char path[MAX_PATH];
        sprintf_s(path, MAX_PATH, "%s\\*.*", dir);
        intptr_t handle;
        _finddata_t findData;
        handle = _findfirst(path, &findData);
        if (handle == -1) return;
        do
        {
                if (findData.attrib & _A_SUBDIR)
                {
                        if (strcmp(findData.name, ".") != 0 && strcmp(findData.name, "..") != 0)
                        {
                                sprintf_s(path, MAX_PATH, "%s\\%s", dir, findData.name);
                                cout << "目录" << path << endl;
                                listFiles(path);
                        }
                }
                else {
                        cout << "文件" << dir << "\\" << findData.name << " " << findData.size << "字节" << endl;
                }
        } while (_findnext(handle, &findData) == 0);
        _findclose(handle);
}
要点: 1.递归是对同名函数反复调用。每次调用结束返回到调用该函数的下一句,不会到同一地址。
           调用前地址入栈保护。
         2.虽是同名函数,但函数内参数是不同,分别保存在不同地址的栈中。只要没结束,不会冲掉。
           比如上述dir,path。看起来是一样,实际上是互不影响的多个同名变量。

      C++的递归调用?
           
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-18 18:12:29 | 显示全部楼层
递归用于解决那种 问题可以分解为 一个解和一个小问题类型的问题
比如数组求和就可以看成是递归
一个长度10的数组 求和;
先递推
可以把问题分解为 第一个元素 + 其余元素 (第一个元素就是解,其余元素就是一个同类问题)
...
一直到最后直接有解为止
然后就是回归
把所有解都加回来 就是最终解了

08_avatar_middle
最佳答案
3 
在线会员 发表于 2019-3-18 21:42:39 | 显示全部楼层
不是所有的语言递归都是一个样的么?
85_avatar_middle
最佳答案
3 
在线会员 发表于 2019-3-18 22:13:35 | 显示全部楼层
函数  在   函数自己的   "里面"  用自己   

每次 函数在调用自己的时候   祖先级别的函数没有释放资源  只有等  最小的曾孙函数 返回了 才  从 曾孙  返回到 孙子  返回到 儿子 返回到 父亲  ..... 祖先
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-27 18:33

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表