找到函数的结果

时间:2011-05-16 08:45:59

标签: recursion pseudocode

有一个未知函数的代码:

function Magic(number)
    r = number mod 2
    print r
    if number > 1
        Magic(number / 2)

(用伪代码编写)

问题是:应该传递什么整数才能收到以下答案

0 1 1 0 0 1

主要问题是我无法弄清楚mod在伪代码中是如何工作的。 应该5,5 mod 3 = 2.5或2

3 个答案:

答案 0 :(得分:1)

除此之外,除法和mod操作都应该接受和输出整数。 “5.5 mod 3”f.e。没有任何意义。并且11/2(整数除法)将返回5,而不是5.5。

这是一个实现伪代码的PHP程序:

<?php

function Magic($number) {
    $r = $number % 2;
    echo $r . ' ';

    if ($number > 1) Magic($number / 2);
}

for ($i = 16; $i < 34; ++$i) {
    echo "($i: ";

    Magic($i);
    echo ") ";
}

echo "\n";

输出结果:

(16: 0 0 0 0 1 ) (17: 1 0 0 0 1 0 ) (18: 0 1 0 0 1 0 ) (19: 1 1 0 0 1 0 ) (20: 0 0 1 0 1 0 ) (21: 1 0 1 0 1 0 ) (22: 0 1 1 0 1 0 ) (23: 1 1 1 0 1 0 ) (24: 0 0 0 1 1 0 ) (25: 1 0 0 1 1 0 ) (26: 0 1 0 1 1 0 ) (27: 1 1 0 1 1 0 ) (28: 0 0 1 1 1 0 ) (29: 1 0 1 1 1 0 ) (30: 0 1 1 1 1 0 ) (31: 1 1 1 1 1 0 ) (32: 0 0 0 0 0 1 ) (33: 1 0 0 0 0 1 0 )

这表明任何整数(x: 0 1 1 0 0 1 )都不可能得到6位数结果x(因为输出字符串单调增长)。但是,Magic(38)是0 1 1 0 0 1 0 - 带有所需字符串的第一个7位数结果,但也有一个尾随零。

对于负整数值,可能只有2个输出为“0”和“-1”。

答案 1 :(得分:0)

mod为您提供整数除法的余数。几个例子:

  • 1 mod 2 = 1(因为整数除法中1/2 = 0)
  • 2 mod 2 = 0(2/2 = 1,无余数)
  • 6 mod 3 = 0(6/3 = 2,无余数)
  • 8 mod 3 = 2

应该省略小数部分。在大多数语言中,它取决于数字的数据类型(如果两个操作数都是整数,某些语言会进行整数除法,这可能也是你应该做的,所以5/2 = 2)。


关于你的第一个问题(剧透警报!,请在阅读本文之前亲自试一试!),从结尾开始,每一步乘以2。如果该步骤中的数字应为1,也请添加1。

所以,最后一步是1.从1开始:

  • 1
  • 1 * 2 = 2
  • 2 * 2 = 4
  • 4 * 2 + 1 = 9

等等。我可以给你正确答案,但我认为如果你亲自尝试它会更好; - )

答案 2 :(得分:0)

首先,这是此问题的可执行python代码。

def Magic(number):
r = number % 2
print r
if number > 1:
    Magic(number / 2)

Magic(15)       

但是,此问题的模式是函数返回给定输入数的REVERSE二进制数。因此,在这种情况下,最简单的解决方案是取0 1 1 0 0 1,将其反转为100110,并计算该二进制数的值,即32 + 4 + 2 = 38.使用此方法,您可以计算任何给定输入的所需数量或预期输出。