Перевести программу с языка C# на C++:
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
var m = 5;
var k = 8;
var result = Sum(m) + Sum(2 * k);
Console.WriteLine(result);
Console.ReadKey();
}
static int Sum(int n, int a = 0)
{
if (n-- == 0) return a;
return Sum(n, 1 + a + n);
}
}
}
Ответы
Ответ дал:
1
#include <iostream>
static int Sum(int n, int a = 0) {
if(!n--)
return a;
return Sum(n, 1 + a + n);
}
signed main() {
int m = 5, k = 8;
int res = Sum(m) + Sum(2 * k);
std::cout << res << std::endl;
return 0;
}
Наглый2:
А почему бы тогда просто не написать n == 0?
Почитай про различия постинкремента и прединкремента, в случае выполнения условия n у нас уменьшится на единичку, а если мы просто сравним n == 0, то у нас ничего не поменяется
Опять неверно выразился, не в случае выполнения, а после выполнения
Если бы написали (--n > 4), то мы бы сначала уменьшили n на 1, а потом сравнили с 4
А в случае (n-- > 4) мы сравниваем n и 4, а затем уменьшаем n
Ок, понял. А в этом случае существует полная форма записи как, например, здесь: x++ (x = x + 1)? Как она будет выглядеть?
if (n == 0) {n -= 1; return a; }
Я поменял на static int Sum(int n, int a = 0)
{
if (n == 0)
{
n -= 1;
return a;
}
return a;
return Sum(n, 1 + a + n);
}
{
if (n == 0)
{
n -= 1;
return a;
}
return a;
return Sum(n, 1 + a + n);
}
Но программа теперь выводит 0 всегда
static int Sum(int n, int a = 0) {
if (n == 0)
return a;
n = n - 1;
return Sum(n, 1 + a + n);
}
if (n == 0)
return a;
n = n - 1;
return Sum(n, 1 + a + n);
}
Вас заинтересует
2 года назад
2 года назад
3 года назад
3 года назад
8 лет назад
8 лет назад
9 лет назад