如何使用递归[C]

时间:2017-01-05 13:38:19

标签: c recursion

好吧所以我正在为我的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));

        }
    }

这是练习答案的代码,但我不理解它,并希望得到一些有关它为何如此解决的见解,因为我不是真的理解它和解决它的不同方法,谢谢这么多事先。

3 个答案:

答案 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 % 10number / 10的函数。您拨打element的原因是,它会删除前一次通话中已检查过的number \ 10的最后一位数字。

最后,这个过程一直持续到你没有数字为止,即number变为零。

示例:number作为min(1234, 9)函数的来电。

  1. 来自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

  2. 递归调用函数
  3. 第一个递归函数调用:

    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

  4. 递归调用函数
  5. 第二次递归函数调用:

    element = 3
  6. 第三个递归函数调用:

    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

  7. 递归调用函数
  8. 最后在第四次也是最后一次递归调用中:

    element = 1