我有一个包含递归函数的代码。我在递归上浪费了很多时间,但我仍然无法得到它,真的:
#include<stdio.h>
count(int);
main(){
int x=10,z;
z=count(x);
}
count(int m){
if(m>0)
return count(m-1);
}
第一次使用参数count
调用10
时,它会满足条件并开始递归。当函数调用自身时会发生什么?我不懂。声明return count(m-1)
的含义是什么?它在哪里转移控制?
答案 0 :(得分:5)
函数count
的返回值未定义,因为如果(m <= 0)
为真,则没有默认返回。
C11,§6.9.1函数定义
如果到达了终止某个函数的
}
,则该值为。{ 函数调用由调用者使用,行为未定义。
此外,要了解递归函数的工作原理,您必须自己动手执行代码(另请参阅here)。
答案 1 :(得分:1)
count
时需要m <= 0
返回一些内容。您应该声明返回类型count
并使用-Wall
进行编译,这样编译器将帮助您在代码中发现错误。
答案 2 :(得分:0)
recursion 意味着函数将调用自身,主要是在它自身的末尾,如果它是尾递归。
所以你的count函数会检查输入参数是否为&gt; 0然后如果是,则调用count(m-1)
。现在它从count
的顶部开始,m = 9。它做同样的事情,然后用m = 8等调用count。
直到达到最终条件,通常应该在您的函数中明确地提供,例如if (m == 0) return m;
或某些此类事情。此时递归结束,函数终止。
此外,count
应具有返回类型,例如int count (int m)
答案 3 :(得分:0)
语句返回计数(m-1)是什么意思?它在哪里转移控制?
这似乎是你唯一的问题。
这意味着它使用值m-1调用“count”。所以如果m是10,那么它用9来调用“count”。
它将控制递归地传递给count方法。
“count”方法中的每个可能路径也没有返回。 如果m是&lt; = 0?
会发生什么