用于计算C中可分数位的递归函数

时间:2013-11-18 18:55:56

标签: c recursion division

我需要编写一个接受数字的递归函数,并且需要检查每个数字是否可以与前一个数字整除。例如,如果输入为63542,则结果应为2,而只有6可以被3整除,而4可以被2整除。这些是唯一可以与之前的数字整除的数字。我有以下代码,但每次返回一次。对于上面的例子,它应该返回2,但它返回3.

#include <stdio.h>

int deliv(int num)
{
    int temp = num%100;
    int counter = 0;

    if(num == 0)
    {
        return 0;
    }
    else if((temp/10)%(num%10) == 0)
    {
        counter++;
        return counter + deliv(num/10);
    }
    else return counter + deliv(num/10);
}

int main()
{
    int result = deliv(63542);
    printf("%d\n", result);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您希望将测试条件从if(num == 0)更改为if(num < 10 ),因为如果num是一位数字,则temp = num/10后临时变为0,可被num%10整除。

另外,添加此条件以避免在两个连续数字为0时发生崩溃。

if(num < 10)
{
    return 0;
}
//To avoid crash due to 2 zeroes
else if(temp==0)
{
    return counter + deliv(num/10);
}
else if((temp/10)%(num%10) == 0)
{
    counter++;
    return counter + deliv(num/10);
}
else return counter + deliv(num/10);