Քանի՞ հատ * կտպի տվյալ ծրագիրը։
#include <iostream> void print(int n) { int i = 0; if (n > 1) print(n - 1); for (i = 0; i < n; i++) std::cout << " * "; } int main() { int n; std::cout << "Input number "; std::cin >> n; if (n < 0) { std::cout << "Invalid input"; return 0; } print(n); }

Հուշում 1

Փորձեք պատասխանել հարցին n-ի փոխարեն օգտագործելով կոնկրետ թվեր։
Քանի՞ հատ * կտպի ծրագիրը, եթե`
n=1
n=2
n=3
n=4

🚩 Հուշում 2

n=2 դեպքում կունենաք հետևյալ իրավիճակը։
Սկզբում կկանչվի print(2) ֆունկցիան։ Այնուհետև կկանչվի print(1) ֆունկցիան։
print(1) կանչի ժամանակ կտպվի 1 հատ *։
print(1) կանչի ավարտից հետո կշարունակի աշխատել print(2) ֆունկցիան, որը իր հերթին էկրանին կտպի ևս 2 հատ *:
Այսպիսով, ընդհանուր առմամբ կտպվի 1 + 2 == 3 հատ * :
 
n = 4 դեպքում ֆունկցիաների կանչի շղթան կունենա հետևյալ տեսքը`
print(1) ֆունկցիան կտպի 1 հատ *
print(2) ֆունկցիան կտպի 2 հատ *
print(3) ֆունկցիան կտպի 3 հատ *
print(4) ֆունկցիան կտպի 4 հատ *
Այսպիսով, ընդհանուր առմամբ կտպվի 1 + 2 + 3 + 4 == 10 հատ *
 
n = 10 - ի դեպքում ֆունկցիաների կանչի շղթան կունենա հետևյալ տեսքը։
Ընդհանուր առմամբ կտպվի
 

🚩 Հուշում 3 (լուծում)

Եթե փորձենք ընդհանրացնել լուծումը մուտքագրված կամայական n թվի համար, կտեսնենք, որ տպված * - երի քանակը հավասար է`
Վերհիշենք դպրոցական մաթեմատիկայի թվաբանական պրոգրեսիայի առաջին n անդամների գումարի բանաձևը։ Կստանանք, որ տպված * ների քանակը հավասար է`