c - C 递归中的因式分解

标签 c recursion factorization

我被要求在 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/

相关文章:

c - 将 C 代码转换为 MIPS 汇编代码

java - 斐波那契使用递归从用户在 Java CLI 中给出的两个任意数开始

java - Pollard Rho 找不到因子

c - 将 csv(行数可变)读入数据结构的最佳实践

c - 按位运算符和 "endianness"

Python - 二维列表的里程表样式组合

java - 使用 Runnable 修复 StackOverflowError 递归

algorithm - 给定一个数字 K 和一组排序的数字。查找集合中是否有任何数字可以相除

primes - 2-3-5-7 轮分解似乎跳过了素数 331

客户端/服务器 C 连接