Was möchtest du denn mit dieser Zeile erreichen? Überlege dir einmal genau was dort passiert...
Code:
return 1 + b(arr, i + 1);
Was du eigentlich willst ist doch an der Stelle 1 zurückzugeben, wenn auch die restlichen Elemente positiv sind. Das musst du dann aber auch prüfen und je nach Rückgabewert den passenden Wert zurückliefern.
Das einfache Addieren wird in der derzeitigen Form nicht funktionieren. Denn dann würdest du z.B. bei einem array mit drei positiven Zahlen 1 + 1 + 1 + (-1) zurückliefern, also nicht 1, obwohl alle drei Werte positiv sind.
Das solltest du am besten einmal im Debugger ausprobieren was passiert.