我被要求在 c 中编写一个 void 函数(无循环),它得到一个偶数(比如说 80),并像这样打印它 2*2*5*2*2 正如你所看到的,结果是 80 哈哈。 在2个数字之间你需要打印“*”,而奇数(对于我的例子,5)你需要在中间打印它,或者如果数字中有一个奇数“2”,比如说96你需要这样打印:2*2*2*3*2*2 如果给定的数字是奇数,则返回该数字。 我不仅想得到答案,还想得到你在开始编码之前“思考”的方式。 这是我到目前为止所得到的
if(n%4==0)
{
printf("2*");
PrintTwos(n/4);
return;
}
if(n%2==0)
{
printf("*2");
PrintTwos(n/2);
return;
}
printf("%d",n);
最佳答案
这是一些伪代码:
func(nbr)
isOdd(nbr) // recursive stop condition
print nbr
return
evenNbr = findFirstEven(nbr) //return the shortest even number from nbr
print evenNbr
func(nbr / evenNbr)
我没有为 *
打印添加逻辑,因为我确信你可以自己解决这个问题。有一种情况会破坏该伪代码,但这是一个很好的开始,可以帮助您思考递归函数应该做什么。
编辑以下评论:(不完整:中间缺少奇数)
int findFirstEven(nbr, i) {
if (nbr%i != 0)
return findFirstEven(nbr, i++);
return i;
}
int primefact(int n)
{
int i=2;
i = findFirstEven(n, i);
printf("%d*", i);
if(n==i)
printf("1");
return 0;
else
primefact(n/i);
}
(未测试)
关于c - C 递归中的因式分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39468397/