当前位置:  开发笔记 > 编程语言 > 正文

数学问题:循环或递归

如何解决《数学问题:循环或递归》经验,为你挑选了1个好方法。

我试图以一种方式将数字分解为数组(在php中),例如:

25变成(16,8,1)

8成为(8)

11变为(8,2,1)

我不知道正确的用语是什么,但我认为这个想法很明确.

我的循环解决方案非常简单:

   $number = rand(0, 128);    
   $number_array_loop = array();

   $temp_number = $number;
   while ($temp_number > 0) {
       $found_number = pow(2, floor(log($temp_number, 2)));
       $temp_number -= $found_number;

       $number_array_loop[] = $found_number;
   }

我也有一个递归的解决方案,但是我不能在不使用全局变量的情况下工作(不想这样),以下内容接近但会导致数组中的数组:

   function get_numbers($rest_number) {

       $found_number = pow(2, floor(log($rest_number, 2)));

       if ($found_number > 0) {
           $temp_array[] = get_numbers($rest_number - $found_number);
           $temp_array[] = $found_number;
       }

       return $temp_array;
   }

   $number_array_recursive = array();
   $number_array_recursive = get_numbers($number);

然而,使用诸如pow(floor(log())之类的东西似乎对于像这样的简单问题有点多.

在我看来,问题需要一个非常简单的数学递归解决方案,但我只是没有看到它.

任何帮助都会被贬低.

编辑:二进制是关键,非常感谢!



1> Brendan..:

你可以得到数字的二进制表示 - 1表示包括2的幂,零表示不

$binary_number = decbin($test_number);
$binary_string = "${binary_number}";
for ($i = 0; $i < strlen($binary_string); $i++) {
  if ($binary_string[strlen($binary_string) - $i - 1] == "1") {
    $num_out = pow(2, $i);
    print "${num_out} ";
  }
}

这已经过测试并且可以正常运行但是在PHP中可能有更好的语法分析方法.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有