好吧所以我正在为我的C考试做准备而且在递归方面我有点陷入困境我是大学新生,这对我来说似乎有点困难,练习要求在给定的数字中使用一个递归函数我需要找到最小元素,例如:52873将是2,程序需要打印2.
#include <stdio.h>
int min (int number, int element){
if (number==0)
return element;
if (element>number%10)
element=number%10;
min(number/10,element);
}
int main (){
int number;
while (scanf("%d",&number)){
printf("%d\n",min(number,9));
}
}
这是练习答案的代码,但我不理解它,并希望得到一些有关它为何如此解决的见解,因为我不是真的理解它和解决它的不同方法,谢谢这么多事先。
答案 0 :(得分:2)
该计划的想法如下:
当你将数字乘以10时,得到最后一位数,例如:
16%10 = 6;
6%10 = 6;
536%10 = 6;
当你/数字加10时,你取出最后一位数字,例如:
16/10 = 1;
6/10 = 0; (6 = 06)
536/10 = 53;
因此,递归回答的概念是将“element”保存为最小的数字,并通过将数字除以10(/)和执行模块(%)来递归地分析每个数字。
但是,我认为你的解决方案存在问题,如果我的数字是0,你将返回9作为答案。
答案 1 :(得分:1)
更清晰让我们看一个例子
递归如何工作
让我们的元素= 9
每次检查最后一位数
min(9154,element) -----first call
if(element>4)
element=4 -------//now element is 4
min(915,element) -------9154/10= 915 ------second call
if(element>5) ------here element is 4 so no update
min(91,element) ------915/10=91 ------third call
if(element>1)
element=1 ---------now element is 1
min(9,element) ---------91/10=9 -----fourth call
if(9>element) ---------no update
min(0,element) ------9/10=0
//since become 0 so it return element
答案 2 :(得分:0)
int min (int number, int element){
if (number==0)
return element;
if (element>number%10)
element=number%10;
min(number/10,element);
}
这里,您的递归函数有两个参数。 int number
存储要获取最少元素的数量,int element
存储最少元素。
在每次通话中,您都会检查以下两个条件:
if (number > 0)
然后返回element
。if (element > number%10)
。在此处,number % 10
表示number
的最后一个数字,并将其与最初设置为element
的{{1}}进行比较。如果9
小于number % 10
,则该元素的值设置为element
。 在上述过程之后,您递归调用具有值number % 10
和number / 10
的函数。您拨打element
的原因是,它会删除前一次通话中已检查过的number \ 10
的最后一位数字。
最后,这个过程一直持续到你没有数字为止,即number
变为零。
示例:将number
作为min(1234, 9)
函数的来电。
来自main()
函数
main()
并以值number = 1234
element = 9
since number != 0 continue;
since, 1234 % 10 i.e, 4 < 9, element is set to 4
和number = 1234 / 10 = 123
第一个递归函数调用:
element = 4
并以值number = 123
element = 4
since number != 0 continue;
since, 123 % 10 i.e, 3 < 4, element is set to 3
和number = 123 / 10 = 12
第二次递归函数调用:
element = 3
第三个递归函数调用:
number = 12
element = 3
since number != 0 continue;.
since, 12 % 10 i.e, 2 < 3, element is set to 2
and the function is recursively called with values `number = 12 / 10 = 1` and `element = 2`
并以值number = 1
element = 2
since number != 0 continue;
since, 1 % 10 i.e, 1 < 2, element is set to 1
和number = 1 / 10 = 0
最后在第四次也是最后一次递归调用中:
element = 1