首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在这个数字反转程序中,递归是如何工作的?

在这个数字反转程序中,递归是如何工作的?
EN

Stack Overflow用户
提问于 2016-12-07 22:50:06
回答 3查看 109关注 0票数 0
代码语言:javascript
运行
复制
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>

// ex06_18.c
// What does this program do?

#define SIZE 10

// function prototype
void someFunction( const int b[], size_t startSubscript, size_t size );

// function main begins program execution
int main( void )
{
    int a[ SIZE ] = { 8, 3, 1, 2, 6, 0, 9, 7, 4, 5 }; // initialize a

    puts( "Answer is:" );
    someFunction( a, 0, SIZE );
    puts( "" );

    _sleep(1000*100);

} // end main

// What does this function do?
void someFunction( const int b[], size_t startSubscript, size_t size )
{
    if ( startSubscript < size ) 
    {
        someFunction( b, startSubscript + 1, size );

        printf( "%d ", b[ startSubscript ] );
    } // end if
} // end function someFunction

someFunction( b, startSubscript + 1, size ) -你能解释一下这部分吗?我调试过了,但是很难理解递归部分是如何处理的?

EN

Stack Overflow用户

发布于 2016-12-07 23:21:43

它将重新调用函数,直到startSubscript变量大于size变量,然后我们可以说索引在a数组的最后一个值上,然后它将返回到第一次调用(我们在0索引上)。

呼叫:

代码语言:javascript
运行
复制
Call #   |       Function call       | Return  | Outputs  
1          someFunction( a, 0, 10 )      -         -
2          someFunction( a, 1, 10 )      -         -
3          someFunction( a, 2, 10 )      -         -
4          someFunction( a, 3, 10 )      -         -
5          someFunction( a, 4, 10 )      -         -
6          someFunction( a, 5, 10 )      -         -
7          someFunction( a, 6, 10 )      -         -
8          someFunction( a, 7, 10 )      -         -
9          someFunction( a, 8, 10 )      -         -
10         someFunction( a, 9, 10 )      -         -
11         someFunction( a, 10, 10)      -         -

10 < 10?False这里我们停止递归调用,并再次返回到从main调用的第一个调用。:

正如我们所看到的,每次我们重新调用someFunction时,由于递归的原因,我们无法访问printf( "%d ", b[ startSubscript ] );

支持:

代码语言:javascript
运行
复制
Call #   |       Function call       | Return  | Outputs (a[startSubscript]) 
10         someFunction( a, 9, 10 )      -         5 
9          someFunction( a, 8, 10 )      -         4
8          someFunction( a, 7, 10 )      -         7
7          someFunction( a, 6, 10 )      -         9
6          someFunction( a, 5, 10 )      -         0
5          someFunction( a, 4, 10 )      -         6
4          someFunction( a, 3, 10 )      -         2
3          someFunction( a, 2, 10 )      -         1
2          someFunction( a, 1, 10 )      -         3
1          someFunction( a, 0, 10 )      -         8

不,我们可以看到数组被“颠倒”了。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41020513

复制
相关文章

相似问题

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