|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
void main()
{
long recursion(int n);
int n;
long result;
printf("input a integer number:\n");
scanf("%d",&n);
result = recursion(n);
printf("%d! = %ld\n", n, result);
}
long recursion(int n)
{
long temp_result;
if(n < 0)
{
printf("n<0, input error\n");
}
else if(n==0 || n==1)
{
temp_result = 1;
}
else
{
temp_result = recursion(n - 1) * n;//这里①
}
return temp_result;//这里②
}
调试过程在long recursion(int n)中,进行到return temp_result;(即②处),函数没有以temp_result的值作为返回值直接跳出,而是又返回temp_result = recursion(n - 1) * n;(即①处),继续调试,以①到②,②到①,来回多次。
而我一直觉得只要一到②处,就应该直接输出返回值,结束函数。
你这是递归,
每次调用函数都是到②处结束函数的。
之所以看到多次在①和②之间来回跳,是因为多次递归调用了recursion()函数
假如输入的是3
第一次调用函数,n=3,运行到①,进行递归调用
第二次调用函数,n=2,运行到①,进行递归调用
第三次调用函数,n=1,运行else if
运行到②处,第三次调用结束,函数返回
返回到①处,继续执行,运行②处,第二次调用结束,函数返回
返回到①处,继续执行,运行②处,第一次调用结束,函数返回
|
|