#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;
}
我知道代码为我提供了d
(f
中的第一个数字)和2
提升到f(函数)中第二个数字之间的乘积
问题在于我不明白它为什么会给我这样的输出,我在代码中没有看到任何运算符(类似于等式d * 2 ^ e)。 非常感谢一个深刻的解释,随时推荐任何有助于学习C的材料。
答案 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 。以下是归纳证明:
f(d, 0)
返回d
,等于 d * 2 0
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 。
QED:我们可以通过归纳总结f(d, n)
为所有n >= 0
计算 d * 2 n 。