老牛来学习 发表于 2020-4-10 14:32:07

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啊???
*/

qiuyouzhi 发表于 2020-4-10 14:37:06

因为那是最后一次调用函数的返回值,只是返回了最后一个函数。
然后跳转到上一层,也就是1*n,
然后再次跳转,直到最开始,然后返回result.

BngThea 发表于 2020-4-10 14:40:08

递归递归,有去有回,每次执行到递归处,下面的代码暂时挂起,等回来的时候继续往下执行

qiuyouzhi 发表于 2020-4-10 14:40:17

打印一下,你或许就明白了:
#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]
查看完整版本: C语言