关于#C语言#的问题,如何解决?

                        ****关于C语言阶乘问题

以下的C程序中,最终得出的值是多少?

  1 #include "stdio.h"
  2
  3 int f(int n);
  4
  5 int main()
  6 {
  7       int a=0;
  8       a=f(4);
  9       printf("the sum n is : %d\n",a);
 10       return 0;
 11 }
 12
 13 int f(int n)
 14 {
 15      printf("this n is : %d\n",n);
 16      if(n>0) return n+f(n-1);
 17      if(n=0) return 0;
 18 }

如果,删除第15条程序“ printf("this n is : %d\n",n);”之后,最终得出的值又是多少?为什么?

if(n=0) return 0;
这里应该是if(n==0)
代码都错了
这个递归就是计算1到n的总和(删除掉15行输出 the sum n is : 10)
保留15行,则分别输出
this n is : 4
this n is : 3
this n is : 2
this n is : 1
this n is : 0
the sum n is : 10

4+3+2+1+0=10

了解一下递归,你就知道为什么了!

4+3+2+1=10


#include <stdio.h> 

int f(int n);

int main()
{
      int a=0;
      a=f(4);
      printf("the sum n is : %d\n",a);
      return 0;
}
int f(int n)
{
     printf("this n is : %d\n",n);
     if(n>0) return n*f(n-1);
     if(n==0) return 1;
}
你的代码原先输出:

img

因为当n减到0时,返回0-->1-->2-->3-->4,乘积等于0(0乘1乘2乘3乘4),最后不能返回0,不然不管什么数的阶乘结果都是0)
应这样改:当n到0时,返回1,这样返回1-->1-->2-->3-->4,,这样能得到结果 ,乘积等于24(1乘1乘2乘3乘4,4!=24)。

img

ps:其他小问题:

1.头文件用< >,不是“”

2.16行,如果要阶乘,把+改成*

3.17行if语句里,如果想要判断n是否等于0,应改为==

输出语句,删不删无所谓。
采纳给下,谢谢!

第17行这里有错误:if(n=0) return 0; 这里少了‘=' ,应该为: if (n == 0) return 0;
和第15行这句没有关系。
修改后得到的结果:
this n is : 4
this n is : 3
this n is : 2
this n is : 1
this n is : 0
the sum n is : 10

关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:#C语言-猜数字游戏