需要知道代码为何以这种方式运行 - 在C中解释代码

时间:2016-08-29 00:01:55

标签: c++ c

#include <stdio.h>

int main() {
    int c;

    c = f(3, 5);
    printf("c = %d\n", c);    
    c = f(4, 2);
    printf("c = %d\n", c);    
    c = f(2, 4);
    printf("c = %d\n", c);    
    c = f(3, 3);
    printf("c = %d\n", c);
}

int f(int d, int e) {
    if (e > 0)
        return f(d, e - 1) + f(d, e - 1);
    else
        return d;    
}

我知道代码为我提供了df中的第一个数字)和2提升到f(函数)中第二个数字之间的乘积

问题在于我不明白它为什么会给我这样的输出,我在代码中没有看到任何运算符(类似于等式d * 2 ^ e)。 非常感谢一个深刻的解释,随时推荐任何有助于学习C的材料。

2 个答案:

答案 0 :(得分:1)

这是一个简单的递归函数,我可以这样写:

while ($usuario = mysqli_fetch_array($resultado, MYSQLI_ASSOC)) {


 $usermail = $usuario['email']; 
 $hash = $usuario['hash'];
 $email-> setTos($usermail)
  ->setFrom("no_responder@test.com.ar")
  ->setFromName("test")
  ->setReplyTo("no_responder@test.com.ar")
  ->setSubject("Convocatorias Semanales")
  ->setHtml('<html><body>TEST</body></html>');



    try {

    $result = $sendgrid->send($email);
            mysqli_query($dbc, "UPDATE newsletter SET enviado = '1' WHERE email='$usermail' "); 
            echo "enviado";

    } catch(\SendGrid\Exception $e) {
        echo $e->getCode() . "\n";
        foreach($e->getErrors() as $er) {
            echo $er;
        }
    }

}


?>

但我可以简单地添加两个相等的术语 | f(d, e-1) + f(d, e-1) if e > 0 f(d,e) = | | d otherwise ,然后它变为:

f(d,e-1)

为了让您了解,只需尝试扩展该功能。按照规则,我可以写:

         |  2* f(d, e-1)    if e > 0
f(d,e) = |
         |  d               otherwise

那是因为定义,因为f(d,0) = d for all d // Identify function

继续:

e=0

答案 1 :(得分:0)

函数f(d, n)计算 d * 2 n 。以下是归纳证明:

  1. f(d, 0)返回d,等于 d * 2 0

  2. f(d, n + 1)返回f(d, n + 1 - 1) + f(d, n + 1 - 1),简化为2 * f(d, n)。如果f(d, n)计算 d * 2 n ,则f(d, n + 1)计算 2 * d * 2 n < / strong>,这正是 d * 2 n + 1

  3. QED:我们可以通过归纳总结f(d, n)为所有n >= 0计算 d * 2 n