怎么用递归函数写m中n的个数 比如说48=4*4*3 所以48中4的个数是2

img

#include <stdio.h>

int fun(int n,int m)
{
 
  if( n%m != 0)
        return 0;
    else 
        return fun(n/m,m)+1;
 // return n%m == 0 ? fun(n/m,m)+1 : 0;//也可以运用三目运算把上面代码写成一句

 //f(48,4) = f(48/4,4)+1 ,f(12,4) = f(12/4,4)+1  f(3,4) = 0
 

}


int main(int argc,char *argv[])
{
    
    int n , m;
    scanf("%d %d",n,m);
    printf("%d\n",fun(n,m));
    //printf("%d\n",fun(48,4));

    return 0;

}

递归的底层实现其实是栈,而栈是先进后出的(即先入栈的反而后出栈)函数内部调用本身,最终满足某个条件时,逐级返回的一个过程

本题分析:
目标是要求出fun(48,4),由此可知fun(48,4)最先入栈,假设fun(48,4) = fun(48/4,4) ; fun(12,4) = fun(12/4,4) ;fun(3,4) = 0;因为3无法再整除4了,所以应该作为返回条件,由上面分析可以知道,每可以进行一次递归,4因子就加一个,直到无法递归时候返回0,所以我们得出的公式为 fun(n,m) = f(n/m,m) +1 ,条件是,n%m != 0(n不能整除m时,取余不为零) 时候 fun(n/m,m) = 0.当函数满足返回条件时,函数逐级返回,出栈,最终会把值累加到fun(n,m).

有帮助的话,希望采纳,以次鼓励