介绍一下递归函数:
当我们定义一个函数时,如果函数内部调用了自身,那么这个函数就称为递归函数。递归函数是一种解决问题的方法,它将大问题分解为相同或类似的小问题,并通过逐步解决这些小问题来解决整个问题。
使用递归函数的核心思想是将一个问题拆解为更简单的子问题,并且解决子问题的方法和解决整个问题的方法是一样的。递归函数通常包括两部分组成:递归条件和基本情况。
- 递归条件:递归函数中需要定义一个条件,当满足这个条件时,函数将不再递归调用,而是直接返回结果。这样可以确保递归函数在适当的时候停止递归调用。
- 基本情况:递归函数中需要定义一个或多个基本情况,即当问题无法再分解,或者达到最小子问题时,递归函数直接返回固定的结果。基本情况相当于递归函数的终止条件,保证了递归函数能够停止并返回结果。
使用递归函数的步骤如下:
- 定义递归函数,确定函数的输入参数和返回值类型。
- 在递归函数中,首先判断是否满足递归条件。如果满足,则直接返回特定值作为结果。
- 如果不满足递归条件,将问题拆解为更小的子问题,并调用自身来解决子问题。通过递归调用,将问题规模逐渐缩小,直到满足递归条件时停止。
- 结合子问题的结果,得到整个问题的解。
- 返回结果。
需要注意的是,使用递归函数时要确保递归能够在有限的时间内结束,否则可能会导致无限循环或栈溢出的问题。另外,递归函数的性能通常比迭代函数差,因此在实际应用中需要权衡使用递归还是其他方法。
总之,递归函数是一种通过将问题分解为相同或类似的子问题来解决整个问题的方法。使用递归函数时,需要定义递归条件和基本情况,并确保递归能够正确终止。
介绍一下什么是鸡(质因)数:
质因数是指可以整除一个正整数的质数。简而言之,就是将一个正整数分解为若干个质数的乘积,这些质数就是它的质因数。
举个例子,如果我们要找出12的质因数,我们可以将12分解成2 * 2 * 3,其中2和3都是质数,它们就是12的质因数。
编程思路:
编程思路是实现一个递归函数来对输入的正整数进行质因数分解,并最终输出结果。
代码的思路如下:
- 首先,在main函数中通过循环读入一个正整数,并判断输入是否合法。输入的正整数保存在变量input中。
- 接下来,调用achieve函数进行质因数分解。achieve函数的参数是输入的正整数input。
- 在achieve函数中,首先定义了两个变量tmp1和tmp2,并初始化为0,以及一个循环变量i初始化为2。tmp1用来保存input除以i的商,tmp2用来保存input除以i的余数。
- 然后,如果输入的正整数input小于2,则直接返回,不再进行质因数分解。
- 在一个无限循环中,先计算tmp1和tmp2的值,tmp1为input除以i的商,tmp2为input除以i的余数。
- 如果tmp2不等于0,说明i不能整除input,需要将i加1,继续尝试其他质数。
- 如果tmp2等于0,说明i能够整除input,即找到了一个质因数。打印出该质因数i,并在之后打印一个" * "的符号。
- 然后,递归调用achieve函数,输入参数为tmp1,对tmp1进行继续的质因数分解。
- 重复步骤5到8,直到tmp1小于等于1,即质因数分解完成。
- 最后,在main函数中,输入的正整数input的质因数分解结果被打印出来。
以上通过递归的方式,将输入的正整数进行质因数分解,输出分解结果。代码简单明了,通过循环读入和递归的思路达到了分解质因数的目的。
源代码:
//输入正整数,将正整数分解质因数。质因数要满足两个条件:1)是这个数的因数;2)是质
//数(素数) 如: 6 = 2 * 3 12 = 2 * 2 * 3
//
void achieve(int input){
int tmp1 = 0, tmp2 = 0, i = 2;
if (input < 2) {
//printf("%d", input);
return;
}
while (1) {
tmp1 = input / i;
tmp2 = input % i;
if (tmp2 != 0) //分解
i++;
else
break;
}
printf("%d ", i);
if (tmp1 > 1) //判断是否为最后一个质数,来选择是否打印*
printf("* ");
achieve(tmp1);
}
int main() {
int input = 0;
while (1) { //读入一个正整数
printf("请输入一个正整数:\n");
scanf("%d", &input);
if (input > 0)
break;
else
printf("输入非法请重新输入!!!\n");
}
printf("%d = ", input);
achieve(input); //递归函数,实现分解质因数
return 0;
}
运行结果:
基本功能已经实现,当然这个代码还存在着漏洞,例如输入1的时候,不会打印分解后结果,感兴趣的同学可以自行优化。
标签:正整数,递归,递归函数,input,质因,质因数,tmp1 From: https://blog.51cto.com/u_16158769/6680382