q:将一正整数表示成各种正整数之和的形式,可以写成的所有划分方式的总共数量叫做划分数,编程实现输出任意一个正整数的划分数。
采用递归方法,而关键在于写出递归函数。对于该题,如下:
div_int(intnum,int max_addnum) =
1, max_addnum== 1
div_int(num,num), max_addnum > num
div_int(num,num-1)+ 1, max_addnum == num
div_int(num,max_addnum-1)+ div_int(num-max_addnum,max_addnum) , others
代码如下:
#include <stdio.h>
#include <stdlib.h>
int div_int(int num,int max_addnum)
{
if(max_addnum == 1) return 1;
if(max_addnum > num) return div_int(num,num);
if(max_addnum == num) return (div_int(num,num-1) + 1);
else
return ( div_int(num,max_addnum-1) + div_int(num-max_addnum,max_addnum) );
}
int main()
{
int num,ans;
printf("please input the number:\n");
scanf("%d",&num);
ans = div_int(num,num);
printf("the huafenshu of %d is %d\n",num,ans);
return 0;
}