2016-11-14 2 views
1

Я должен написать функцию, которая найдет количество обуви для определенного количества собак. Это можно легко сделать с умножением, но мы должны использовать рекурсию, так что яРекурсия для решения базового умножения

def dogShoes(n): 
    total = 0 
    if n>0: 
     shoes = n + dogShoes(n) 
     total = total + 1 
     if total == 4: 
      return shoes 

Но теперь я понимаю, что линия 4 будет идти к бесконечности, а нижняя часть, что я хотя бы остановить его выиграл» t даже реализовано. Есть ли способ сказать, когда total является 4, остановить и вернуть ответ без shoes в направлении бесконечности?

+6

Это самый странный способ узнать рекурсию, которую я когда-либо видел. –

+0

Можете ли вы использовать петли? Если да, сделайте это. –

+0

@ElliotRoberts «но мы должны использовать рекурсию» –

ответ

4

Вы можете упростить вашу функцию много:

def dogShoes(n): 
    if n == 0: 
     return 0 
    else: 
     return 4 + dogShoes(n-1) 

Поскольку вы должны использовать рекурсию вместо того, чтобы просто возвращение n * 4 вы можете просто переписать умножение как сложение (рекурсивно).

Какая странная задача ...

+5

Ваш код не работает для [этой собаки] (http://tripawds.com/wp-content/blogs.dir/1/files/product_pics/20160305w_GripTrex14.jpg). – wim

+1

@wim дикий комментарий дикий –

+1

@wim Ну, обратно к чертежной доске. Нам нужно больше математики (или больше ног) – Keiwan

2

Вы называете вашу функцию рекурсивно, но никогда не изменяя параметр, тем самым давая бесконечную рекурсию. Попробуйте:

>>> def dog_shoes(n): 
... if n > 0: 
...  return 4 + dog_shoes(n-1) 
... else: 
...  return 0 
... 
>>> dog_shoes(1) 
4 
>>> dog_shoes(2) 
8 
>>> dog_shoes(3) 
12 
0
def Mul(n, x): 
if n==1: 
    return x 
else: 
    return x+ Mul(n-1,x) 

Вот простая функция умножения с использованием Python рекурсии, используя два аргумента.

Mul(3,3) 
>>>9