• Предмет: Информатика
  • Автор: Наглый2
  • Вопрос задан 6 лет назад

Перевести программу с языка 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);
}
}
}

Ответы

Ответ дал: restIess
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?
restIess: Почитай про различия постинкремента и прединкремента, в случае выполнения условия n у нас уменьшится на единичку, а если мы просто сравним n == 0, то у нас ничего не поменяется
restIess: Опять неверно выразился, не в случае выполнения, а после выполнения
restIess: Если бы написали (--n > 4), то мы бы сначала уменьшили n на 1, а потом сравнили с 4
restIess: А в случае (n-- > 4) мы сравниваем n и 4, а затем уменьшаем n
Наглый2: Ок, понял. А в этом случае существует полная форма записи как, например, здесь: x++ (x = x + 1)? Как она будет выглядеть?
restIess: if (n == 0) {n -= 1; return a; }
Наглый2: Я поменял на static int Sum(int n, int a = 0)
{
if (n == 0)
{
n -= 1;
return a;
}
return a;
return Sum(n, 1 + a + n);
}
Наглый2: Но программа теперь выводит 0 всегда
restIess: static int Sum(int n, int a = 0) {
if (n == 0)
return a;
n = n - 1;
return Sum(n, 1 + a + n);
}
Вас заинтересует