C 这个密码给出了一个荒谬的答案

C 这个密码给出了一个荒谬的答案,c,function,recursion,C,Function,Recursion,可能重复: 我有一个包含递归函数的代码。我在递归上浪费了很多时间,但我仍然无法得到它,真的: #include<stdio.h> count(int); main(){ int x=10,z; z=count(x); } count(int m){ if(m>0) return count(m-1); } 当第一次使用参数10调用count时,它满足条件并开始递归。当函数调用自身时,会发生什么?我不明白。语句return countm

可能重复:

我有一个包含递归函数的代码。我在递归上浪费了很多时间,但我仍然无法得到它,真的:

#include<stdio.h>

count(int);

 main(){
   int x=10,z;
   z=count(x);
}  
count(int m){
   if(m>0)
      return count(m-1);
}

当第一次使用参数10调用count时,它满足条件并开始递归。当函数调用自身时,会发生什么?我不明白。语句return countm-1是什么意思?它在哪里传输控件?

当m函数count的返回值未定义时,您需要count来返回一些内容,因为如果m递归意味着函数将调用自己,如果它是尾部递归,则主要是在它自己的末尾

因此,count函数检查输入参数是否大于0,如果大于0,它将调用countm-1。现在它从计数的顶部开始,m=9。它做同样的事情,然后用m=8调用count,以此类推

直到达到结束条件,这通常应该在函数中明确满足,例如如果m==0,则返回m;或者类似的事情。此时递归结束,函数终止

此外,count应该有一个返回类型,例如int-m

语句return countm-1是什么意思?它在哪里传输控制

这似乎是你唯一的问题

这意味着它正在调用值为m-1的count。所以如果m是10,那么它是用9调用count

它将控制递归地转移到count方法

在count方法中,对于每个可能的路径也没有返回值。
如果m是内联函数在纸上画出来的,会发生什么。你也没有详细说明这个荒谬的答案。这有什么荒谬之处?这是什么?我知道返回的含义,但我不能用递归的方式得到它。我想打印0-10的数字,但它打印9939,就像值一样。你的代码根本不打印任何东西,所以我不知道你为什么希望打印数字。这实际上永远不会返回任何东西。