#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 )
- 您能解释一下这部分吗?我调试了它,但很难理解递归部分是如何处理的?
最佳答案
它将重新调用该函数,直到 startSubscript
变量大于 size
变量,然后我们可以说索引位于 上的最后一个值code>a
数组,然后它将返回到第一个调用(我们位于 0 索引)。
通话:
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 这里我们停止递归调用,并再次返回到从主函数调用的第一个调用。 :
正如我们所看到的,每次我们重新调用 someFunction
时,都会有 printf( "%d ", b[ startSubscript ] );
由于递归,我们无法到达它。
支持:
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
不,我们可以看到数组已被“反转”
关于c - 这个数字反转程序中的递归是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020513/