C语言中可除数字计数的递归函数

C语言中可除数字计数的递归函数,c,recursion,division,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)

我需要编写一个接受一个数字的递归函数,它需要检查每个数字是否可以被前一个数字整除。例如,如果输入是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;
}
#包括
整数交付(整数)
{
内部温度=数值%100;
int计数器=0;
如果(num==0)
{
返回0;
}
如果((温度/10)%(数值%10)==0,则为else)
{
计数器++;
返回计数器+deliver(num/10);
}
else返回计数器+deliver(num/10);
}
int main()
{
int结果=交付(63542);
printf(“%d\n”,结果);
返回0;
}

您希望将测试条件从
if(num==0)
更改为
if(num<10)
,因为如果num是一个单位数,则temp会在
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);
if(num<10)
{
返回0;
}
//避免因2个零而崩溃
否则如果(温度==0)
{
返回计数器+deliver(num/10);
}
如果((温度/10)%(数值%10)==0,则为else)
{
计数器++;
返回计数器+deliver(num/10);
}
else返回计数器+deliver(num/10);

像8421这样的数字呢。对于8,4和2,1的配对,是否返回“2”。或者它是否返回“3”以包括“4,2”?@selbie它应该返回3。此外-如果传递到Deliver的“num”是10的倍数,则程序将崩溃。尝试输入“5000”而不是“63542”,看看会发生什么。@selbie知道如何解决它吗?但它永远不会小于0。