Вы объявляете, что ваша функция возвращает float, но вы никогда не возвращаете значения.
Поскольку C является передачей по значению, вы не изменяете значения параметров внутри вашего рекурсивно вызванногоCalculate_RG.
Какие бывают типы temp2, Lg, Ls и ratio?Вы объявили их вне этой функции или проигнорировали предупреждения компилятора?Каковы начальные значения этих (глобальных) переменных?
Вы используете рекурсию для большинства веток вашего кода.У вас должно быть четкое условие (защита рекурсии), где рекурсия должна прекратиться.Какое условие завершения (значения отношений и т. Д.) Должно привести к остановке вашей рекурсии?Также обычно с рекурсией ожидают, что вы присваиваете возвращаемое значение из рекурсии переменной, которую ваша вызывающая функция либо использует, либо возвращает.
Добавьте printf для отображения различных значений чуть выше ваших условных выражений.Вы также можете передать параметр 'глубины', чтобы вы могли напечатать глубину рекурсии (это помогло бы с отладкой).
printf("r:%f, d:%d, cratio:%f, temp2:%d, Lg:%d, Ls:%d, ratio:%d\n",
r,d,cratio,temp2,Lg,Ls,ratio);
if(ratio < 3)
Эта функция будет показывать вам, какую ветвь (и) принимает ваша функция, когда она проходитвниз по рекурсивным вызовам.
Ваши условные выражения обрабатывают значения для коэффициента,
- коэффициент <3 (должно быть <= 3?) </li>
- коэффициент> 3 &&ratio <5 (должно быть> = 3 или <= 5?) </li>
- ratio> 5 (должно быть> = 5?)
Ваше условное выражение ничего не сделает, когда соотношение== 3 или == 5, поэтому вы должны изменить граничные условия, чтобы включить эти две точки, или добавить еще, чтобы обнаружить эти случаи. (всегда обрабатывайте все доменные значения, даже если вы просто предоставляете комментарий, в котором говорится, что вы игнорируете эти значения).
Вы также делаете такое же сравнение для коэффициента и кратия,
- коэффициент> cratio
- коэффициент
- чтоВы хотите сделать, когда ratio == cratio?
Когда ваш код уменьшает temp2 (вдвое), первый может быть --temp2 или temp2-- (без семантической разницы), но второйуменьшает после , когда вы вызываете функцию, которая не оказывает последующего влияния на вашу программу (temp2 никогда больше не используется / не ссылается).Вы ничего не печатаете, когда коэффициент имеет значение <3 или> 5.
temp2--;
Calculate_RG(r, temp2--, ratio);
....
temp2++;
Calculate_RG(r, temp2, ratio);