Ні , але не з тих причин, які наводили інші люди. Різниця між рекурсією та індукцією полягає не в тому, що рекурсія "зверху вниз", а індукція - "знизу вгору". Індукція ізоморфна тому, що називається "первісною рекурсією", але, загалом, рекурсія суворо потужніша за індукцію .
Відмінність "зверху вниз" і "знизу вгору" є тривіальною - будь-яка примітивна рекурсивна програма "зверху вниз" може бути механічно перетворена на щось "знизу вгору". Насправді будь-який доказ за допомогою індукції можна перетворити на рекурсивну програму. У рамках обчислення індуктивних конструкцій, якщо ви хочете довести, що кожне натуральне число є фропульозним, ви записуєте це як функцію, яка будує доказ того, що n froopulous, роблячи рекурсивний виклик, щоб побудувати доказ того, що n- 1 - фропулозний.
Ключовим фактором спонукання є те, що речі визначаються у вигляді дрібніших речей, і вони "знизу" після кінцево багато кроків. Натуральні числа є індуктивними, оскільки кожен натуральний або 0, або спадкоємець меншого натурального. Списки є індуктивними, оскільки кожен список або порожній, або може бути розбитий ("розгорнутий") на елемент та менший список.
Іноді рекурсивні програми не пишуться, як дрібні речі. Наприклад, візьміть цю функцію Collatz:
fun collatz(n)
if n <= 1
return 0;
else if n % 2 == 0
return 1 + collatz(n / 2)
else
return 1 + collatz(3 * n + 1)
end
Ця функція не йде ні зверху вниз, ні знизу вгору, і тому не є індуктивною для натуральних чисел.
Можливо, є наказ поставитися до цього індуктивно, але для більшості речей просто немає способу. Функції над нескінченними потоками - прекрасний приклад. Насправді, потоки є прототиповим прикладом "індуктивного" типу.
"Практичні основи для мов програмування" Боба Харпера, доступні безкоштовно в Інтернеті, є приємним вступом до індуктивних, коіндуктивних та рекурсивних типів.