Обнаружил странное поведение программы. Знатоки, внимание на экран.
#include <stdio.h>
int power(int a, int x)
{
int res;
if(x>0)
{
res=a*power(a,x-1);
}
else
{
res=0;
}
}
main()
{
printf("%d\n",power(2,10));
}
Программа выдает 2048. Вообще, если задать другие
![$a$ $a$](https://dxdy-01.korotkov.co.uk/f/4/4/b/44bc9d542a92714cac84e01cbbb7fd6182.png)
и
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
, то она всегда выдаст
![$a^{x+1}$ $a^{x+1}$](https://dxdy-02.korotkov.co.uk/f/5/2/c/52c3c4a7bcf7c7d8803304e5a4c1c1cd82.png)
Вопросы:
а) почему именно 2048?
б) почему она
вообще что-то выдает, ведь return-а в функции power
нет?!
Примечания:
а) если поменять неправильную строчку res=0 на res=1, то абсолютно ничего не меняется. Так что в это тыкать не надо:)
б) если добавить недостающую строчку return res, то программа ведёт себя так, как и задумывалось - просто считает степень. Однако не забудь я этот return - не было бы этой интересной (для меня) загадки.
-- Пт июл 05, 2013 04:02:54 --P.S. Язык совсем не знаю, да.