C语言
#include<stdio.h>double fact(int n)
{
double result;
if(n == 1 || n == 0)
{
result = 1;
}
else
{
result = n * fact(n - 1); //这个递归调用程序是怎么执行的?
}
return result;
}
/*
我的理解是:
程序每次到13行执行调用的时候,赋值语句是从右到左执行的,
那么每次执行到fact(n - 1),又重新调用自己,但是值并没有赋给result,
并且最后随着n - 1,最终程序会变成1再执行一次,那么不管怎样,最后的
返回值result都是1啊???
*/ 因为那是最后一次调用函数的返回值,只是返回了最后一个函数。
然后跳转到上一层,也就是1*n,
然后再次跳转,直到最开始,然后返回result. 递归递归,有去有回,每次执行到递归处,下面的代码暂时挂起,等回来的时候继续往下执行 打印一下,你或许就明白了:
#include<stdio.h>
double fact(int n)
{
double result;
if(n == 1 || n == 0)
{
result = 1;
}
else
{
result = n * fact(n - 1); //这个递归调用程序是怎么执行的?
printf("%.2f\n", result);
}
return result;
}
int main()
{
int temp = fact(5);
printf("%d", temp);
return 0;
}
页:
[1]