Вычисление рекуррентно-заданной функции - VB

Узнай цену своей работы

Формулировка задачи:

Описание функции 1. Каждое натуральное число имеет хотя бы один делитель 2. Само число не считается для себя делителем. 3. Дано число N. 4. Пусть его делители d1, d2, ...., dn 5. Наша функция выглядит так f(N) = f(d1) + f(d2) + ... + f(dn) ; и f(1) = 1 Надо написать программу, вычисляющую эту функцию для любого N. Решение: 1. Рекуррентный вид функции сам собой напрашивался на рекурсивное решение. Но вот проблема! Число слагаемых вещь переменная! 2. Хорошо. Что делать? Получить все Делители заданного числа легко. Значит надо объявить массив, который будет набиваться заранее вычисленными делителями. (Для нового числа обнулить его несложно) 3. Нужен цикл? Нужен. Но это ведь не просто сумма чего-то... решал, решал... не идет решение (наверное к дождю). А решить хочется. Может я не что-то не так делаю? Тааак! Решение где-то рядом! Кто подскажет?

Решение задачи: «Вычисление рекуррентно-заданной функции»

textual
Листинг программы
Function f(n As Integer) As Integer
         f = 1
         For i% = 1 To n \ 2
             If n Mod i% = 0 Then f = f + f(i%)
         Next i%
End Function
 
Sub Test()
    m% = 500
    Debug.Print f(m%)
End Sub

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы